您的位置:首页 > 其它

多web站点统一访问授权管理中心系统项目(源码)

2014-01-28 13:50 609 查看
多 asp.net 统一访问授权管理中心系统可行性调研报告

现状: 用户一台服务器上有多个 ASP.NET 应用程序,每一个应用都有独自的访问权限管理模块,这些模块原理基本一样

目的:设计开发一个 “访问权限管理中心系统” ,能够管理所有ASP.NET 应用程序的访问权限,统一用户登录界面,用户登录成功后可访问已授权的全部ASP.NET 应用程序 (单点登录), 对现有的 ASP.NET 应用程序 ,尽量不修改源码

可行方案:

思路:
一个管理中心(asp.net)+ 多个拦截器(class)
管理中心使用 asp.net 自带的 membership roleManager profile 存放所有可登录用户 , 所有角色,用户角色关系,此功能可以模仿asp.net 网站管理工具(开源)实现,

管理中心可管理的ASP.NET 应用程序 从 web.config 中 取得
ASP.NET 应用程序的功能列表(功能ID 功能名称 RUL ) , 通过 各个 ASP.NET 应用程序 所提供的 WEBAPI (一个 URL) 获得的json 数据得到
角色和功能的对应关系存放于自建的数据表中

管理中心提供WEBAPI 供 拦截器调用, 获得访问用户的已授权功能 ,获得所有授权用户 , 等。

拦截器: 利用 IHttpModule 开发一个class ,编译成dll ,放入bin 文件夹中,通过web。config 添加到系统中 ,不修改原 ASP.NET 应用程序 代码
拦截器通过管理中心所提供的 webapi 获得访问用户是否拥有此访问页面的授权, 如果未授权,则终止访问

实现方法:

假设 权限管理系统命名为 mymag , 2个 ASP.NET 应用程序命名为 asp1 asp2

1 访问权限管理中心系统:

asp.net 系统

统一用户登录界面

用户管理界面

角色管理界面

利用asp.net 自带的 membership roleManager profile 模块能够配置多应用适配器的功能很容易实现多应用程序的用户,角色,访问权限的分布存储和统一管理, 对 membership roleManager profile 不了解的读者请先查阅相关资料。

web config具体配置

membership :

<membership>

<providers>

<clear/>

<add applicationName="mymag" name="mymag" connectionStringName="DefaultConnection" type="System.Web.Security.SqlMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" />

</providers>

</membership>

说明: membership 保存所有登录用户信息,所有只需要一个适配器, applicationName 是访问权限管理中心名称 mymag,name 适配器名称, connectionStringName 数据库连接字符串名称

roleManager :

<roleManager enabled="true" defaultProvider="mymag" >

<providers>

<clear/>

<add name="mymag" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="mymag"/>

<add name="asp1" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="asp1"/>

<add name="asp2" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="asp2"/>

</providers>

</roleManager>

说明:roleManager 用于保存多个asp.net应用程序各自的角色 ,所以需要多个适配器。 applicationName 分别对应 ASP.NET 应用程序名称 ,name 分别对应适配器名称, connectionStringName 数据库连接字符串名称 因本管理系统数据都存放于一个数据库中,所以和 membership的connectionStringName 一一样。 当然也可以使用多个连接字符串将数据保存到不同数据库中,这也是 membership 系统强大之处。不过 放在一起也没问题,只要
applicationName 正确, 角色就不会混乱。

c# 代码 : 用 Roles.Providers 可以读取所有的 role 适配器,也就是 ASP.NET 应用程序名称 ,Roles.Providers["asp1"] 对象中有很多方法,例如: .CreateRole 创建用户 GetAllRoles 获取所有用户 , 等

profile :

<profile enabled="true" defaultProvider=" mymag" automaticSaveEnabled="false">
<providers>
<clear/>
<add name="mymag" type=" System.Web.Profile.SqlProfileProvider" connectionStringName="DefaultConnection" applicationName="mymag"/>

</providers>
<properties>
<add name="apps" type="System.String[]" allowAnonymous="false" defaultValue="" readOnly="false"/>
</properties>
</profile>

说明: powers 用于存放用户已授权APPNAME
c# 参考代码 :

var p= ProfileBase.Create(username);
p.SetPropertyValue(" apps", new string[] { "P01", "P02" });
p.Save();
var s = P.GetPropertyValue(" apps");

获得webapi 数据参考代码:

System.Net.WebClient c = new System.Net.WebClient();
string jsonstr= c.DownloadString("http://1921.168.0.1/webapi");

拦截器:

创建一个类库项目 ,参考代码:

namespace SecurityManagementCenter
{
public class Handler : IHttpModule
{

public void Init(HttpApplication context)
{
context.AuthenticateRequest += new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;

////在此添加权限验证代码

context.Response.Write("error " + DateTime.Now.ToString()); //返回错误信息
application.CompleteRequest(); //终止访问
return;
}

将项目编译的DLL放置于个 各个 asp.net程序 bin 目录中
web.config 中 <configuration> 添加 配置节点 如下

经典模式 // 仅 asp.net 访问有效
<system.web>
<httpModules>
<add name="SecurityManagementCenter" type="SecurityManagementCenter.Handler,SecurityManagementCenter"/>
</httpModules>
</system.web>

集成模式 // preCondition="managedHandler" 仅 asp.net 访问
<system.webServer>
<modules>
<add name="SecurityManagementCenter" type="SecurityManagementCenter.Handler,SecurityManagementCenter" preCondition="managedHandler" />
</modules>
</system.webServer>

并完成一个测试型项目 , 源码地址 https://code.csdn.net/peiyu_peiyu/websecuritymanagementcentersystem
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: