为Microsoft Dynamics CRM 2011配置Claims-Based认证

Microsoft Dynamics CRM 4.0 使用Windows集成认证(Integrated Windows authentication)来对内部用户进行认证,使用窗体身份认证(Forms authentication)来对不使用VPN的外部用户提供internet访问。Microsoft Dynamics CRM 2011 将窗体身份认证替换为了基于声明的认证(Claim-based authentication),它能够提供简化的的用户访问和单点登录(single sign-on)来访问Microsoft Dynamics CRM的数据。本文将介绍如何为CRM 2011配置Claim-based认证以及IFD。

关于ADFS和Claim,可参考下述资料:

A Guide to Claims–based Identity and Access Control (https://go.microsoft.com/fwlink/?LinkID=188049)

Using Active Directory Federation Services 2.0 in Identity Solutions (https://go.microsoft.com/fwlink/?LinkID=209776)

Windows Server 2008 R2 Active Directory Federation Services 2.0 (https://go.microsoft.com/fwlink/?LinkId=200771)

AD FS 2.0 Step-by-Step and How To Guides (https://go.microsoft.com/fwlink/?LinkId=180357)

Claims-Based Identity for Windows.pdf (https://go.microsoft.com/fwlink/?LinkID=209773)

本文的内容将包括以下三部分:

1. Claim-based认证的准备工作

2. 配置Claim-based认证-内部访问

3. 配置Claim-based认证-外部访问(IFD)

1. Claim-based认证的准备工作

在配置Claim-based认证之前,需要考虑以下问题:

1 CRM Server 2011和AD FS 2.0的条件

如果你打算将组件装在同一个服务器上,那么你需要注意AD FS 2.0会安装在默认站点上。因此,在安装CRM 2011时需要将其安装在一个新的站点上。

在配置Claim-based认证之前,必须配置CRM 2011站点使用Secure Sockets Layer(SSL)。因为,CRM安装程序默认不会将站点配置成SSL。

CRM 2011的站点必须是具有单一绑定(single binding)。多个IIS绑定,例如两个HTTPS或两个HTTP,是CRM 2011不支持的。但可以有一个HTTP绑定,一个HTTPS绑定。

配置Claim-based认证之后,在浏览器上必须使用HTTPS来访问CRM 2011的内部和外部地址。

2 )证书的选择和要求

在使用Claim-based认证时,证书在客户端和CRM服务器之间的安全通信中扮演了重要的角色。你需要在配置Claim-based认证之前对数字证书有一个深入的理解。

下面的文档介绍了证书以及Public Key infrastructure(PKI)

· Application Security - Certificates (https://go.microsoft.com/fwlink/?LinkId=200774)

· Certificate Requirements for Federation Servers (https://go.microsoft.com/fwlink/?LinkId=182466)

在MS CRM 2011的Claim-based认证时,以下场景需要证书:

Claims加密:Claim-based认证需要identities提供一个加密的证书来认证。这个证书必须被信任的认证机构(CA)签名。

SSL(HTTPS)加密:为SSL加密的证书必须对类似这些的主机名有效,例如org.contoso.com, auth.contoso.com, 和 dev.contoso.com. 为了满足这些需求,你可以使用一个通配符(wildcard)证书(*.contoso.com),或者一个支持Subject Alternative Name的证书,或为每个名称创建单独的证书。最后一种方法仅仅适用于你为每个web server角色使用不同的服务器。多个IIS绑定,例如一个站点有两个HTTPS绑定或两个HTTP绑定,这对于CRM 2011是不支持的。

在你选择证书时,下述证书可作为参考:

通配符证书( wildcard certificate ,推荐) :一个通配符证书满足单个域(domain)里内部和外部访问的需求。例如,*.contoso.com证书支持外部访问(org1.contoso.com和org2.contoso.com)和内部访问(internalcrm.contoso.com)。因为外部的域名(contoso.com)需要为内部访问来解析,因此你不能使用服务器名称来作为内部访问。如果你希望这样,你需要使用不同的CRM 2011服务器来提供内部和外部的Claims访问,从而允许使用服务器名称来作为内部访问。

Subject Alternative Name SAN )证书: 如果你希望使用与外部访问地址不同的地址来进行内部访问,那么你可以使用SAN证书。例如:你内部域名为org.contoso.local,外部域名为org.contoso.com。不过请注意,第三方证书供应商一般不为.local域名提供证书。

自签名证书( Self-signed certificate ): 自签名证书仅仅在测试时推荐使用。如果你使用自签名证书,它必须导入所有CRM 2011服务器以及所有访问CRM 2011的客户端上的Trusted Root Certification Authorities store。

申请证书

在这里,我将以通配符证书为例,介绍如何创建证书:

1) 打开IIS管理器

2) 点击服务器名称,在主界面双击Server Certificates

3) 在右侧面板中点击Create Certificate Request…

4) 按照下图填写每一栏,点击Next

5) Cryptographic Service Provider Properties页保持默认值,点击Next。

6) 在File Name页面,输入C:\req.txt,然后点击Finish。

7) Run cmd,运行

certreq -submit -attrib "CertificateTemplate: WebServer" C:\req.txt

8) 选择CA,点击OK.

9) 将证书存储为C:\Wildcard.cer。(7-9也可以在CA中完成)

10) 回到IIS管理器,点击第3) 步图中的Complete Certificate Request…

11) 选择C:\Wildcard.cer,Friendly name取名为 *.contoso.com,当然,你也可以取其他名称。

12) 点击OK。

13) 这样我们就完成了通配符证书的请求。

为默认站点绑定SSL证书

1) 打开IIS管理器。

2) 在Connections面板,展开Sites,点击Default Web Site。

3) 在Actions面板,点击Bindings。

4) 在Site Bindings对话框,点击Add。

5) Type选择https。

6) SSL certificate,选择刚才创建的证书 *.contoso.com,然后点击OK。

7) 点击Close。

为CRM 2011站点绑定SSL证书

1) 打开IIS管理器。

2) 在Connections面板,展开Sites,点击Default Web Site。

3) 在Actions面板,点击Bindings。

4) 在Site Bindings对话框,点击Add。

5) Type选择https。

6) SSL certificate,选择刚才创建的证书 *.contoso.com。

7) Port选择一个不同于443(例如444)的端口号,然后点击OK

8) 点击Close。

3 DNS配置

在为MS CRM 2011配置Claims-based认证之前,你需要在DNS中添加一些记录,来让CRM 2011的各个断点可以被正确解析。如果你是在配置测试环境,那么你可以在hosts.ini文件里配置这些记录,但在生产环境中不推荐使用hosts.ini文件。

在DNS中为外部访问地址(例如:contoso.com)添加一个正向查找区域(forward lookup zone)

  1. 点击Start=>Administrative Tools=>DNS,打开DNS管理器。
  2. 在树形结构中点击DNS服务器,然后点击New Zone来启动向导。按默认值完成向导。

在正向查找区域创建完毕后,为下列域名创建DNS记录:

· AD FS 2.0服务器(例如: sts1.contoso.com)

· 外部 IFD访问地址 - Microsoft Dynamics CRM IFD federation endpoint (例如: auth.contoso.com)

· Microsoft Dynamics CRM Discovery Web Service endpoint (例如: dev.contoso.com)

· Microsoft Dynamics CRM 组织名 (例如: AWC.contoso.com and WTT.contoso.com)

· 内部访问地址 - Microsoft Dynamics CRM claims federation endpoint (例如: internalcrm.contoso.com)

注意: 若你已经添加了DNS记录,但还是遇到域名解析的问题,可以在客户机上运行一下 ipconfig /flushdns 来清理一下cache。

 

4 )防火墙配置

你需要设置防火墙来允许CRM 2011和AD FS 2.0所使用的端口传入的数据流。HTTPS(SSL)默认的端口是443.

2. 配置Claim-based认证 - 内部访问

 

配置内部访问的Claim-based认证需要完成以下步骤:

1. 安装并配置AD FS 2.0。

2. 为Claims-based认证配置CRM 2011服务器。

3. 为Claims-based认证配置AD FS 2.0 服务器。

4. 测试claims-based认证内部访问。

安装并配置AD FS 2.0

CRM 2011可以与各种STS提供者(STS Provider)一起使用。本文使用Active Directory Federation Services (AD FS) 2.0 来提供安全令牌服务(security token service)。

注意:AD FS 2.0会安装到默认站点,因此在安装AD FS 2.0之前,必须将CRM 2011安装在新建的站点上。

1) 下载AD FS 2.0

请从下述链接下载AD FS 2.0

Active Directory Federation Services 2.0 RTW (https://go.microsoft.com/fwlink/?LinkID=204237).

2) 安装AD FS 2.0

在安装向导中选择federation server role进行安装,更多信息可参考

Install the AD FS 2.0 Software (https://go.microsoft.com/fwlink/?LinkId=192792).

3) 配置AD FS 2.0

1. 在AD FS 2.0服务器上,点击Start,然后点击AD FS 2.0 Management.

2. 在 AD FS 2.0 Management 页, 点击 AD FS 2.0 Federation Server Configuration Wizard.

3. 在 Welcome 页, 选择 Create a new Federation Service, 然后点击 Next.

4. 在 Select Deployment Type 页, 选择 Stand-alone federation server, 然后点击 Next.

5. 选择你的 SSL 证书(选择上一节中创建的证书 *.contoso.com), 添加一个Federation Service 名称 (例如, sts1.contoso.com), 然后点击 Next.

注意: 只有在你为AD FS 2.0网站使用通配符证书的时候,才需要添加Federation Service 名称。

6. 总结页面点击 Next.

7. 点击 Close 来关闭 AD FS 2.0 配置向导。

8. 如果你还没有为第五步中的federation服务器名称(sts1.contoso.com)添加DNS记录,请为其添加DNS记录。

4) 验证 AD FS 2.0 是否工作

请按下述步骤来验证 AD FS 2.0 是否工作:

1. 打开 Internet Explorer.

2. 输入federation metadata的URL,例如:

https://sts1.contoso.com/federationmetadata/2007-06/federationmetadata.xml

3. 确保没有跟证书相关的警告出现。

 

为Claims-based认证配置CRM 2011服务器

 在安装并配置完AD FS 2.0之后,我们需要在配置Claims-based认证之前,设置CRM 2011的绑定类型(binding type)和根域(root domains) 。 

根据下述步骤来设置CRM 2011绑定为HTTPS并配置根域名地址:

1. 打开 Deployment Manager.

2. 在 Actions 面板, 点击 Properties.

3. 点击 Web Address 页.

4. 在 Binding Type, 选择 HTTPS.

5. 确保网络地址对于绑定CRM 2011站点的SSL证书和SSL端口有效。因为你为内部访问配置Claims-based认证,所以为根域地址使用主机名。端口号必须与IIS中CRM 2011站点设置的端口一致。

6. 例如,对于*.contoso.com通配符证书,你可以使用internalcrm.contoso.com:444作为网络地址。

7. 点击OK.

注意: 如果CRM Outlook 客户端配置使用旧的绑定值,那么需要更新来使用新的值。

从CRM 2011传递到AD FS 2.0的Claims数据需要使用你在Claims-Based认证配置向导(在下文中介绍)中指定的证书进行加密。因此,CRM Web应用程序的CRMAppPool账户必须对加密证书的私钥具有读(read)的权限。根据下述步骤来赋予此权限:

1. 在CRM 2011服务器上, 运行 Microsoft Management Console (Start=>Run MMC)。

2. 点击Files=>Add/Remove Snap-in…

3. 左侧面板中选择Certificates,点击Add添加到右侧面板。

4. 在弹出的窗口中选择Computer account。

5. 下一个页面中,选择Local computer,点击Finish。

6. 点击OK。

7. 展开Certificates(Local Computer) =>Personal, 选中Certificates。

8. 在中间面板,右击你将要在Claims-Based认证配置向导中指定的加密证书(此例中为*.contoso.com),点击All Tasks=>Manage Private Keys.

9. 点击Add,添加CRMAppPool账户(若你使用的是Network Service,直接选择该账户),然后赋予Read权限。

注意:

你可以使用 IIS管理器来查看CRMAppPool使用了什么账户。在 Connections 面板, 点击 Application Pools, 然后查看CRMAppPool下的Identity

10. 点击OK。

下面,我们通过Claims-Based认证配置向导(Configure Claims-Based Authentication Wizard)来配置Claims-Based认证。若想了解如何通过PowerShell来配置Claims-Based认证,可参考英文原文。

1. 打开 Deployment Manager。

2. 左侧导航面板中,右击 Microsoft Dynamics CRM, 然后点击 Configure Claims-Based Authentication.

3. 读一读这一页的内容, 然后点击 Next.

4. 在 Specify the security token service 页, 输入Federation metadata URL, 例如

https://sts1.contoso.com/federationmetadata/2007-06/federationmetadata.xml.

5. 这个数据通常是在AD FS 2.0的网站上。可将这个URL复制到IE上来查看federation metadata,来确保这是正确的URL。IE上访问该URL时不能有证书相关的警告。

6. 点击 Next.

7. 在 Specify the encryption certificate 页, 点击Select…

8. 选择一个证书,在这里,我们选择 *.contoso.com。

9. 这个证书是用来加密传到AD FS 2.0安全令牌服务的认证安全令牌。

注意

Microsoft Dynamics CRM 服务账户必须对加密证书的私钥有Read。

10. 点击 Next. Claims-Based认证配置向导会验证你指定的令牌和证书。

11. 在 System Checks 页,若检验通过,点击 Next.

12. 在 Review your selections and then click Apply 页, 确认刚才的输入,然后点击Apply.

13. 在这一页中,记下其中的URL,因为接下来,你将使用这个URL添加一个信赖方(relying party)到安全令牌服务。

14. 点击 Finish

为Claims-based认证配置AD FS 2.0服务器

完成上一步后,下一步我们需要在AD FS 2.0中添加并配置声明提供方信任(claims provider trusts)和依赖方信任(relying party trusts)。 

1) 配置claims provider trusts

 你需要添加一条claims rule来从Active Directory获得user的UPN(user principal name)然后将其作为UPN传递到MS CRM。根据以下步骤来配置AD FS 2.0将UPN LDAP属性作为claim发送到依赖方(relying party):

1. 在安装有 AD FS 2.0 的服务器上, 打开 AD FS 2.0 Management.

2. 在 Navigation Pane, 展开 Trust Relationships, 然后点击 Claims Provider Trusts.

3. 在 Claims Provider Trusts下, 右击 Active Directory, 然后点击 Edit Claims Rules.

4. 在 Rules 编辑器, 点击 Add Rule,

5. 在 Claim rule template 列表, 选择 Send LDAP Attributes as Claims 模板, 然后点击Next.

6. 创建下列rule:

       · Claim rule name: UPN Claim Rule (或其他说明性的名称)

      · Add the following mapping:

            Ø Attribute store: Active Directory

           Ø LDAP Attribute: User Principal Name

           Ø Outgoing Claim Type: UPN

7. 点击 Finish, 然后点击 OK 关闭 Rules 编辑器.

2) 配置relying party trusts

在开启claims-based认证之后,你必须将CRM 2011服务器配置成一个信赖方来使用从AD FS 2.0传来的声明来进行内部访问的claims认证。

1. 在安装有 AD FS 2.0 的服务器上, 打开 AD FS 2.0 Management.

2. 在 Actions 菜单,点击 Add Relying Party Trust.

3. 在 Add Relying Party Trust Wizard, 点击 Start.

4. 在 Select Data Source 页, 点击 Import data about the relying party published online or on a local network, 输入定位 federationmetadata.xml文件的URL.

Federation metadata是在设置Claims的时候创建的。使用Claims-Based认证配置向导最后一页上的URL。本例中为https://internalcrm.contoso.com:444/FederationMetadata/2007-06/FederationMetadata.xml 。确保没有证书相关的警告出现。

5. 点击 Next.

6. 在 Specify Display Name 页, 输入一个显示的名称,例如 CRM Claims Relying Party, 然后点击 Next.

7. 在 Choose Issuance Authorization Rules 页, 选择 Permit all users to access this relying party ,然后点击 Next.

8. 在 Ready to Add Trust 页, 点击 Next, 然后点击 Close.

9. 如果Rule编辑器出现, 点击 Add Rule. 否则, 在 Relying Party Trusts 列表, 右击你创建的relying party 对象,点击 Edit Claims Rules, 然后点击 Add Rule.

10. 在 Claim rule template 列表, 选择 Pass Through or Filter an Incoming Claim 模板,然后点击 Next.

11. 创建以下rule:

     · Claim rule name: Pass Through UPN (或其他描述性名称)

     · Add the following mapping:

    Ø Incoming claim type: UPN

    Ø Pass through all claim values

12. 点击 Finish.

13. 在 Rule编辑器, 点击 Add Rule, 在 Claim rule template 列表, 选择 Pass Through or Filter an Incoming Claim 模板, 然后点击 Next:

   · Claim rule name: Pass Through Primary SID (或其他描述性名称)

   · Add the following mapping:

     Ø Incoming claim type: Primary SID

     Ø Pass through all claim values

14. 点击 Finish.

15. 在 Rule编辑器, 点击 Add Rule

16. 在 Claim rule template 列表, 选择 Transform an Incoming Claim 模板, 然后点击 Next.

17. 创建以下 rule:

   · Claim rule name: Transform Windows Account Name to Name (或其他描述性名称)

    Ø Incoming claim type: Windows account name

    Ø Outgoing claim type: Name

    Ø Pass through all claim values

18. 点击 Finish, 创建好这三个rule后, 点击 OK 关闭Rule 编辑器

 

测试claims-based认证内部访问

你现在应该能够使用claims认证来内部访问CRM 2011了

1. 打开 Deployment Manager.

2. 展开 Deployment Manager 节点, 然后点击 Organizations.

3. 右击你的organization,然后点击 Browse. 这样你就能够打开CRM 网页了 (例如: https://internalcrm.contoso.com:444).

如果CRM网页不能显示,那么run以下iisreset然后再试一次。

如果CRM 网页依然无法显示,那么你可能需要为AD FS 2.0服务器设置一个SPN (Service Principal Name)。重新运行Claims-Based认证向导,然后浏览到Specify the security token service页,记下AD FS 2.0服务器在Federation metadata URL中的名称。(本例中为sts1.contoso.com)

1. 打开命令行工具.

2. 输入下述命令: (应用时,用你自己环境中的名称替换命令行中的名称)

c:\>setspn -a http/sts1.contoso.com contoso\crmserver$

c:\>iisreset

3. 然后再重新访问 Microsoft Dynamics CRM Server 2011 网站,这样,你应该能够成功访问到CRM 2011网页。

3. 配置Claim-based认证 - 外部访问

 开启对CRM 2011数据的Claims-based认证的外部访问,需要做以下步骤: 

1. 完成上一节中的内容:配置Claim-based认证-内部访问。

2. 为IFD配置CRM 2011服务器。

3. 为IFD配置AD FS 2.0服务器。

4. 测试claims-based认证外部访问。

为IFD配置CRM 2011服务器

在开启了Claims认证的内部访问后,就可以开启通过IFD外部claims访问了。下面介绍使用IFD配置向导来进行配置,若希望了解如何使用PowerShell来进行配置,可参考英文原文。

1. 打开Deployment Manager.

2. 在树形结构上, 右击 Microsoft Dynamics CRM, 然后点击 Configure Internet-Facing Deployment.

3. 点击 Next.

4. 在 Make Microsoft Dynamics CRM available to users who connect through the Internet 页, 输入所指定的CRM 2011角色的域名,然后点击Next.

注意

Ø 填入域名,而不是服务器名.

Ø 如果CRM安装在同一个服务器上或者所安装的服务器都在同一个域中,那么Web Application Server Domain 和 Organization Web Service Domain 应该是同一个.

Ø Discovery Web Service Domain必须是Web Application Server Domain的一个子域. 默认地, "dev." 会加在Web Application Server Domain之前来构成Discovery Web Service Domain.

Ø 域名必须要对SSL证书的名称有效

域名举例:

Ø Web Application Server Domain: contoso.com:444

Ø Organization Web Service Domain: contoso.com:444

Ø Discovery Web Service Domain: dev.contoso.com:444

关于网址的更多信息,请参考 Install Microsoft Dynamics CRM Server 2011 on multiple computers (https://go.microsoft.com/fwlink/?LinkID=199532)

5. 在 Enter the external domain where your Internet-facing servers are located 输入框, 输入你的面向internet的CRM 2011服务器所在的外部域的信息,然后点击 Next.

你所指定的域必须是上一步中指定的Web Application Server Domain的子域. 默认地, 会将"auth." 加在Web Application Server Domain之前。

域名举例:

Ø External Domain: auth.contoso.com:444

6. 在 System Checks 页, 若没有问题,点击 Next.

7. 在 Review your selections and then click Apply 页, 确认你的输入, 然后点击 Apply.

8. 点击 Finish.

9. 打开命令行工具,运行: iisreset

10. 若你还没用在DNS中添加以下IFD端点的记录,请添加这些记录。 (例如: orgname.contoso.com, auth.contoso.com, dev.contoso.com)

为IFD配置AD FS 2.0服务器

在CRM 2011上开启了IFD之后,你需要再AD FS 2.0服务器上为IFD端点创建一个依赖方。请按照以下步骤进行操作:

1. 在安装AD FS 2.0的服务器上打开AD FS 2.0 Management。

2. 在 Actions 菜单下,点击 Add Relying Party Trust.

3. 在 Add Relying Party Trust Wizard, 点击 Start.

4. 在 Select Data Source 页, 点击 Import data about the relying party published online or on a local network, 输入定位 federationmetadata.xml文件的URL.

Federation metadata是在配置IFD的时候创建的。本例中为https://auth.contoso.com:444/FederationMetadata/2007-06/FederationMetadata.xml 。

在浏览器中访问该URL,确保没有证书相关的警告出现。

5. 点击 Next.

6. 在 Specify Display Name 页, 输入显示名称, 例如 CRM IFD Relying Party, 然后点击 Next.

7. 在 Choose Issuance Authorization Rules 页, 选择 Permit all users to access this relying party 选项, 然后点击 Next.

8. 在 Ready to Add Trust 页, 点击 Next, 然后点击 Close.

9. 如果Rule编辑器出现, 点击 Add Rule. 否则, 在 Relying Party Trusts 列表, 右击你创建的relying party 对象,点击 Edit Claims Rules, 然后点击 Add Rule.

10. 在 Claim rule template 列表, 选择 Pass Through or Filter an Incoming Claim 模板,然后点击 Next.

11. 创建以下 rule:

   · Claim rule name: Pass Through UPN (或其他说明性名称)

   · Add the following mapping:

    Ø Incoming claim type: UPN

    Ø Pass through all claim values

12. 点击 Finish.

13. 在 Rule编辑器, 点击 Add Rule, 在 Claim rule template 列表, 选择 Pass Through or Filter an Incoming Claim 模板, 然后点击 Next:

   · Claim rule name: Pass Through Primary SID (或其他说明性名称)

   · Add the following mapping:

    Ø Incoming claim type: Primary SID

    Ø Pass through all claim values

14. 点击 Finish.

15. 在 Rules 编辑器, 点击 Add Rule,

16. 在 Claim rule template 列表, 选择 Transform an Incoming Claim 模板, 然后点击 Next.

17. 创建下列 rule:

   · Claim rule name: Transform Windows Account Name to Name (或其他说明性名称)

    Ø Incoming claim type: Windows account name

    Ø Outgoing claim type: Name

    Ø Pass through all claim values

18. 点击 Finish, 在你创建完三个rule后, 点击 OK 关闭 Rule编辑器.

测试claims-based认证外部访问

现在,你应该使用claims认证外部访问CRM 2011了。在IE中浏览CRM 2011的外部地址(例如:https://org.contoso.com:444),你将看到下面的页面:

输入用户名密码,登陆CRM 2011.

谢谢!

Jackie Chen(陈攀)

原文下载地址:https://www.microsoft.com/downloads/en/details.aspx?FamilyID=9886ab96-3571-420f-83ad-246899482fb4