Enterprise Library Step By Step系列(五):安全应用程序块——入门篇

简介:
写在前面:按照本系列随笔的风格,还是立足于初学者,所以在入门篇里面介绍的比较简单,在进阶篇里面多介绍一些进一步的探索内容。避免给初学者一种觉得安全应用程序块很复杂的感觉。
一.     安全应用程序块概述:
安全应用程序块通过一个或多个安全机制,帮助开发人员在应用程序中实现通用的安全相关任务。
需要提高扩展性,以便在不改变应用程序代码的情况下更改认证或授权方式。
提供了以下几个方面的功能:
1 .认证
2 .授权
3 .角色管理
4 Profile 管理
二.     几个重要的概念:
1.          Credential(令牌)
2.          Identity(身份)
3.          Principal(主体特征)
三.     使用三部曲:
在进行使用前请确保项目中有 App.config Web.config 文件,并且需要数据库中有相关的表和存储过程,具体可参见数据库 EntLibQuickStarts Enterprise Library 的示例库)。
1 .定义配置文件:
1 )运行 Enterprise Library Configuration  配置工具,打开项目中的配置文件;
2 )右击 Application ,选择 New | Security Application Block ,创建一个安全应用程序块;
3 )在 Security Application Block | Authentication  节点上右击,选择   New | Database Authentication Provider ,创建一个数据库认证 Provider
4 )根据在数据访问应用程序块中所讲的,设置数据库的连接字符串;
5 )右击 Cryptography Application Block | Hash Providers ,选择 New | Hash Algorithm Provider ,创建一个加密 Provider ,并设置 SaltEnabled True
6 )选择 Security Application Block | Authentication | Database Provider 设置  Database  属性为  Database Instance并且设置 HashProvider 属性为SHA1Managed
7 )选择 Security Application Block ,设置它的 DefaultAuthenticationInstance Database Provider


8 )选择 File | Save All 保存全部。
至此,关于认证部分的配置已经做完。仅仅有这些还不够,我们还要进行设置角色。
9 )选择 Security Application Block ,右击 Roles ,选择 New | Role Database Provider 创建一个角色的数据库 Provider
10 )设置 Database 属性为 Database Instance
11 )选择 Security Application Block 节点,设置 DefaultRolesInstance ,为 RolesDatabase Provider

12 )保存全部 File | Save All
至此,所有的配置文件的工作已经做完。最后别忘了,做拷贝目录
1None.gifcopy "$(ProjectDir)\*.config" "$(TargetDir)"
2 .创建 Security Provider 实例:
1 None.gif IAuthenticationProvider authprovider;
2 None.gif            authprovider  =  AuthenticationFactory.GetAuthenticationProvider();
3 .执行 Security Provider 命令:
 1 None.gif   public   static   bool  Authenticate( string  username,  string  password)
 2 ExpandedBlockStart.gif         {
 3InBlock.gif            bool authenticated = false;
 4InBlock.gif
 5InBlock.gif            
 6InBlock.gif            NamePasswordCredential credentials;
 7InBlock.gif            credentials = new NamePasswordCredential(username, password);
 8InBlock.gif 
 9InBlock.gif            IAuthenticationProvider authprovider;
10InBlock.gif            authprovider = AuthenticationFactory.GetAuthenticationProvider();
11InBlock.gif 
12InBlock.gif            IIdentity identity;
13InBlock.gif            authenticated = authprovider.Authenticate(credentials, out identity);
14InBlock.gif 
15InBlock.gif            if (!authenticated)
16ExpandedSubBlockStart.gif            {
17InBlock.gif                throw new SecurityException("Invalid username or password.");
18ExpandedSubBlockEnd.gif            }

19InBlock.gif            
20InBlock.gif          
21InBlock.gif            
22InBlock.gif            IRolesProvider rolesprovider;
23InBlock.gif            rolesprovider = RolesFactory.GetRolesProvider();
24InBlock.gif 
25InBlock.gif            IPrincipal principal;
26InBlock.gif            principal = rolesprovider.GetRoles(identity);
27InBlock.gif 
28InBlock.gif            // Place user's principal on the thread
29InBlock.gif            Thread.CurrentPrincipal = principal;
30InBlock.gif            
31InBlock.gif            return authenticated;
32ExpandedBlockEnd.gif        }
入门篇就到这里了,安全应用程序块内容比较多,所以有些步骤里面我没有截图,请大家谅解。在进阶篇里面,我会分别介绍认证,授权(包括授权规则),角色,个性化服务,以及严格的帐号管理策略, Security Cache ,包括第三方的基于数据库角色授权的插件等。


















本文转自lihuijun51CTO博客,原文链接:  http://blog.51cto.com/terrylee/67603 ,如需转载请自行联系原作者




相关文章
|
8月前
|
编译器 Go 开发工具
JetBrains GoLand 以debug运行Go程序时出现could not launch process: decoding dwarf section info at offset 0x0: too short报错之保姆级别解决方案
JetBrains GoLand 以debug运行Go程序时出现could not launch process: decoding dwarf section info at offset 0x0: too short报错之保姆级别解决方案
105 0

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    27
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    27
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    27
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    28
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    25
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    31
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    22
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    20
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    21
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    20