zoukankan      html  css  js  c++  java
  • Enterprise Library Step By Step系列(五):安全应用程序块——入门篇

     写在前面:按照本系列随笔的风格,还是立足于初学者,所以在入门篇里面介绍的比较简单,在进阶篇里面多介绍一些进一步的探索内容。避免给初学者一种觉得安全应用程序块很复杂的感觉。

    一.     安全应用程序块概述:

    安全应用程序块通过一个或多个安全机制,帮助开发人员在应用程序中实现通用的安全相关任务。

    需要提高扩展性,以便在不改变应用程序代码的情况下更改认证或授权方式。

    提供了以下几个方面的功能:

    1.认证

    2.授权

    3.角色管理

    4Profile管理

    二.     几个重要的概念:

    1.          Credential(令牌)

    2.          Identity(身份)

    3.          Principal(主体特征)

    三.     使用三部曲:

    在进行使用前请确保项目中有App.configWeb.config文件,并且需要数据库中有相关的表和存储过程,具体可参见数据库EntLibQuickStartsEnterprise 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,并设置SaltEnabledTrue

    6)选择Security Application Block | Authentication | Database Provider设置 Database 属性为 Database Instance, 并且设置 HashProvider 属性为SHA1Managed

    7)选择Security Application Block,设置它的DefaultAuthenticationInstanceDatabase 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

    至此,所有的配置文件的工作已经做完。最后别忘了,做拷贝目录

    1copy "$(ProjectDir)\*.config" "$(TargetDir)"

    2.创建Security Provider实例:

    1IAuthenticationProvider authprovider;
    2            authprovider = AuthenticationFactory.GetAuthenticationProvider();

    3.执行Security Provider命令:

     1 public static bool Authenticate(string username, string password)
     2        {
     3            bool authenticated = false;
     4
     5            
     6            NamePasswordCredential credentials;
     7            credentials = new NamePasswordCredential(username, password);
     8 
     9            IAuthenticationProvider authprovider;
    10            authprovider = AuthenticationFactory.GetAuthenticationProvider();
    11 
    12            IIdentity identity;
    13            authenticated = authprovider.Authenticate(credentials, out identity);
    14 
    15            if (!authenticated)
    16            {
    17                throw new SecurityException("Invalid username or password.");
    18            }

    19            
    20          
    21            
    22            IRolesProvider rolesprovider;
    23            rolesprovider = RolesFactory.GetRolesProvider();
    24 
    25            IPrincipal principal;
    26            principal = rolesprovider.GetRoles(identity);
    27 
    28            // Place user's principal on the thread
    29            Thread.CurrentPrincipal = principal;
    30            
    31            return authenticated;
    32        }

    入门篇就到这里了,安全应用程序块内容比较多,所以有些步骤里面我没有截图,请大家谅解。在进阶篇里面,我会分别介绍认证,授权(包括授权规则),角色,个性化服务,以及严格的帐号管理策略,Security Cache,包括第三方的基于数据库角色授权的插件等。

    支持TerryLee的创业产品Worktile
    Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
    https://worktile.com
  • 相关阅读:
    FileUtils功能概述
    java collections
    java的OutOfMemoryError: PermGen space实战剖析
    中华人民共和国知识产权行业标准——表格格式和代码标准 第1部分:表格代码规则
    JVM EXCEPTION_ACCESS_VIOLATION
    【转】Linux tail 命令详解
    【转】XSHELL下直接下载文件到本地(Windows)
    Java与JavaScript之间关于JSON的是非恩怨
    MySQL的Blob类型的手工编辑(manually edit)
    Linux上传下载
  • 原文地址:https://www.cnblogs.com/Terrylee/p/261414.html
Copyright © 2011-2022 走看看