为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)
- 点击Start=>Administrative Tools=>DNS,打开DNS管理器。
- 在树形结构中点击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