声明演练:使用自定义成员资格和角色提供程序为基于声明的 SharePoint 2010 Web 应用程序创建基于表单的身份验证

**摘要:**了解如何使用自定义成员资格和角色提供程序为基于声明的 Web 应用程序创建基于表单的身份验证。

上次修改时间: 2013年1月18日

适用范围: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

本文内容
使用自定义成员资格和角色提供程序验证基于声明的 Web 应用程序概述
步骤 1:查看成员资格和角色提供程序代码
步骤 2:生成和部署成员资格和角色提供程序
步骤 3:创建 SharePoint Web 应用程序
步骤 4:为 SharePoint Web 应用程序配置成员资格和角色提供程序
步骤 5:测试基于表单的身份验证
步骤 6:查看声明
结论
其他资源

**供稿人:**Andy Li,Microsoft Corporation

目录

  • 使用自定义成员资格和角色提供程序验证基于声明的 Web 应用程序概述

  • 步骤 1:查看成员资格和角色提供程序代码

  • 步骤 2:生成和部署成员资格和角色提供程序

  • 步骤 3:创建 SharePoint Web 应用程序

  • 步骤 4:为 SharePoint Web 应用程序配置成员资格和角色提供程序

  • 步骤 5:测试基于表单的身份验证

  • 步骤 6:查看声明

  • 结论

  • 其他资源

单击以获取代码 下载代码:ClaimsExample-UsingCustomMembershipandRoleProvider(该链接可能指向英文页面)

使用自定义成员资格和角色提供程序验证基于声明的 Web 应用程序概述

在本演练中,您会通过将自定义成员资格和角色提供程序用作身份验证提供程序来创建基于声明的 Web 应用程序。

在 Microsoft SharePoint 2010 中,基于表单的身份验证通过实现成员资格提供程序和角色管理器来提供自定义身份管理,前者定义用于标识各个用户并对其进行身份验证的接口,而后者定义将各个用户分组到逻辑组或角色的接口。

本文假定您熟悉基于表单的身份验证。有关基于表单的身份验证的更多信息,请参阅 Forms Authentication in SharePoint Products and Technologies (Part 1): Introduction

步骤 1:查看成员资格和角色提供程序代码

首先,查看成员资格和角色提供程序的代码。

查看成员资格和角色提供程序代码

  1. 打开以下文章附带的代码示例下载中包含的 ContosoProviders 项目:下载代码:ClaimsExample-UsingCustomMembershipandRoleProvider(该链接可能指向英文页面)

    备注

    此项目包含将用于基于声明的 Web 应用程序的成员资格和角色提供程序的定义。

  2. 打开 Members.cs 文件。

    备注

    成员资格提供程序定义为 ContosoProviders.Members。UserDB 是模拟用户数据库的字符串数组。

    private static string[] UserDB = {
            "user1:user1@contoso.com",
            "user2:user2@contoso.com",
            "user3:user3@contoso.com",
            "user4:user4@contoso.com",
            "user5:user5@contoso.com",
            "user6:user6@contoso.com"
            };
    
  3. 查看以下两种方法。

    public override MembershipUser GetUser(string username, bool userIsOnline)
    public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
    

    这两种方法用于获取基于用户名的 MembershipUser 对象。

  4. 查看以下两种方法。

    public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
    public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    

    用户尝试搜索或解析用户名时,SharePoint 人员选取器会调用这两种方法。

  5. 查看 ValidateUser 方法。

    public override bool ValidateUser(string username, string password)
    

    此方法用于验证用户的凭据。在此成员资格提供程序示例中,我们只验证用户是否存在(不检查密码)。

    备注

    在生产环境中,应验证用户密码。本示例仅用于演示目的,不应在生产环境中使用。

  6. 打开 Roles.cs 文件:

    • 角色提供程序定义为 ContosoProviders.Roles。

    • UserRoleDB 数组和 RoleDB 数组用于模拟用户和角色存储。

    private static string[] UserRoleDB = {
            "user1:Role1:Role2:Role3",
            "user2:Role2:Role4",
            "user3:Role3:Role1:Role4",
            "user4:Role4:Role1:Role2",
            "user5:Role2:Role1",
            "user6:Role1:Role4"
            };
    
    private static string[] RoleDB = {
                    "Role1", "Role2", "Role3", "Role4"
    };
    
  7. RoleExists(rolename 字符串)属性用于搜索或解析角色名称。

    备注

    角色不支持通配符。

  8. GetRolesForUser 方法由 SharePoint 在登录过程中调用,以获取用户的声明(角色)信息。

步骤 2:生成和部署成员资格和角色提供程序

接下来,生成和部署成员资格和角色提供程序。

生成和部署成员资格和角色提供程序

  1. 右键单击 ContosoProviders 项目,然后单击"重新生成"。

  2. 将 ContosoProviders.dll 部署到全局程序集缓存。

步骤 3:创建 SharePoint Web 应用程序

接下来,创建 SharePoint Web 应用程序。

创建 SharePoint Web 应用程序

  1. 浏览到"SharePoint 2010 管理中心"页。

  2. 在"应用程序管理"部分,单击"管理 Web 应用程序"。

  3. 在服务器功能区上,单击"新建"。

  4. 在"新建 Web 应用程序"对话框中的"身份验证"下,单击"基于声明的身份验证"。

  5. 在"IIS 网站"部分的"新建 IIS 网站"下,将"名称"字段更改为 SharePoint – 自定义 FBA。

  6. 将端口号更改为 500。

  7. 在"声明身份验证类型"部分,执行以下操作:

    • 单击"启用基于表单的身份验证(FBA)"。

    • 清除其他验证模式。

  8. 在成员资格提供程序和角色管理器字段中,键入下面显示的名称,全部采用小写字母:

    • ASP.NET 成员资格提供程序名称:custommembershipprovider

    • ASP.NET 角色管理器名称:customroleprovider

    我们尚未设置成员资格和角色提供程序;我们将在随后的步骤中创建它们。

  9. 将 URL 更改为以下内容:http://intranet.contoso.com:500

  10. 在"应用程序池"下,选择"使用现有应用程序池: SharePointAppPool"。

  11. 在"数据库名称和验证"部分,将数据库名称更改为 WSS_Content_500。

  12. 将其他设置保留为默认值。

  13. 单击"确定"以创建 Web 应用程序。

步骤 4:为 SharePoint Web 应用程序配置成员资格和角色提供程序

必须修改以下 3 个 web.config 文件:

  • 管理中心,以允许选取网站集

  • 安全令牌服务,以允许登录和发放令牌

  • FBA Web 应用程序,以允许选取本地 Web 应用程序

为 SharePoint Web 应用程序配置成员资格和角色提供程序

  1. 在自定义 FBA Web 应用程序网站的 web.config 文件中,在 <membership> 标记的 Providers 元素内添加以下项。

    <add name="custommembershipprovider" type="ContosoProviders.Members, ContosoProviders, Version=1.0.0.0, 
      Culture=neutral, PublicKeyToken=26fc91a86676aa9f" />
    

    添加提供程序的值后,web.config 文件应类似于图 1。

    图 1. 自定义 FBA Web 应用程序的提供程序值

    自定义 FBA Web 应用程序的提供程序值

  2. 将以下角色管理器元素添加到 <RoleManager> 部分下的 Providers 元素,如图 2 所示。

    <add name="customroleprovider" type="ContosoProviders.Roles, 
      ContosoProviders, Version=1.0.0.0, Culture=neutral, 
      PublicKeyToken=26fc91a86676aa9f" />
    

    图 2. 自定义 FBA Web 应用程序的角色管理器值

    自定义 FBA Web 应用程序的角色管理器值

  3. 对"管理中心"网站和"SecurityTokenServiceApplication"网站重复上面的步骤。

    备注

    SharePoint STS 网站的 web.config 文件不包含 <system.web> 部分。必须手动添加该部分。有关 web.config 文件的示例,请参阅声明演练:使用 ASP.NET SQL 成员资格和角色提供程序为基于声明的 SharePoint 2010 Web 应用程序创建基于表单的身份验证一文附带的下载代码:ClaimsExample-CreateFormsBasedAuthentication(该链接可能指向英文页面)

步骤 5:测试基于表单的身份验证

接下来,测试基于表单的身份验证。

测试基于表单的身份验证

  1. 在"管理中心"网站上的"应用程序管理"下,单击"创建网站集"。

  2. 在"Web 应用程序"下拉列表中,选择自定义 FBA Web 应用程序 **http://intranet.contoso.com:500**。

    图 3. 配置自定义 FBA Web 应用程序

    配置自定义 FBA Web 应用程序

  3. 将标题更改为自定义 FBA 网站,如图 3 所示。

  4. 在"用户名"字段中,单击"浏览"图标,找到我们之前添加的用户。

  5. 在左侧窗格上选择"表单身份验证",在搜索框中键入 user1,然后单击搜索按钮,如图 4 所示。

    图 4. 使用人员选取器搜索 user1

    使用人员选取器搜索 user1

  6. 在结果区域中,双击 user1。这样,您就会返回到网站集创建页面。

  7. 单击"确定"以创建网站集。

  8. 浏览到 **http://intranet.contoso.com:500**。您应看到一个登录页,如图 5 所示。

    图 5. 登录页

    登录页

  9. 键入 user1 作为用户名凭据,然后单击"登录"。(密码可以是您选择的任意内容。)

  10. 登录后,请注意右上角显示的用户名为 user1,如图 6 所示。

    图 6. 右上角的用户名

    右上角的用户名

步骤 6:查看声明

接下来,查看声明。

查看声明

  1. 创建 Web 部件。将 RenderContent 函数替换为以下代码(另请参见本文附带的下载中包含的 FBAClaimsViewer.cs. 文件)。

    备注

    您可能需要添加对 Microsoft.IdentityModel.dll 的引用并添加命名空间 Microsoft.IdentityModel.Claims。

    protected override void RenderContents(HtmlTextWriter writer)
     {
        try
        {
            IClaimsIdentity currentIdentity = System.Threading.Thread.CurrentPrincipal.Identity as IClaimsIdentity;
            writer.Write("---Subject:" + currentIdentity.Name + "<BR/>");
    
            foreach (Claim claim in currentIdentity.Claims)
            {
                writer.Write("   ClaimType: " + claim.ClaimType + "<BR/>");
                writer.Write("   ClaimValue: " + claim.Value + "<BR/");
                writer.Write("   ClaimValueTypes: " + claim.ValueType + "<BR/>");
                writer.Write("   Issuer: " + claim.Issuer + "<BR/");
                writer.Write("   OriginalIssuer: " + claim.OriginalIssuer + "<BR/>");
                writer.Write("   Properties: " + claim.Properties.Count.ToString() + "<BR/>");
            }
        }
        catch (Exception ex)
        {
            writer.Write("exception occurred: " + ex.Message);
        }
    
    }
    
  2. 部署解决方案并将 Web 部件添加到"FBA 网站"网站应用程序的主页。

  3. 应看到类似于图 7 的输出。

    图 7. 声明类型和声明值信息

    声明类型和声明值信息

  4. 注意以下三个声明:

    ClaimType: https://schemas.microsoft.com/ws/2008/06/identity/claims/role
    ClaimValue: Role1
    Issuer: SharePoint
    Properties: 0
    ClaimType: https://schemas.microsoft.com/ws/2008/06/identity/claims/role
    ClaimValue: Role2
    Issuer: SharePoint
    Properties: 0
    ClaimType: https://schemas.microsoft.com/ws/2008/06/identity/claims/role
    ClaimValue: Role3
    Issuer: SharePoint
    Properties: 0
    

    角色声明是从 ContosoProviders.Roles 检索的。

  5. 在功能区中的"网站操作"下,单击"网站权限",然后单击"授予权限"。单击"浏览"图标以打开"人员选取器"对话框。

  6. 键入 role2,然后单击"搜索",如图 8 所示。

    图 8. 在人员选取器中搜索 role2

    在人员选取器中搜索 role2

  7. 尝试将 role2 添加到 Members 组,然后检查以下内容:

    • 现在谁能够登录网站?为什么?

    • 尝试使用 role2 中的用户登录,查看是否存在任何问题。

结论

基于表单的身份验证在 Microsoft SharePoint Server 2010 中提供自定义身份管理。在此演练中,您学习了如何使用自定义成员资格和角色提供程序为基于声明的 Web 应用程序创建基于表单的身份验证。

其他资源

有关详细信息,请参阅以下资源: