本博文是基于前面博文安装的Dynamics CRM 2013来继续的,具体请参考前面博文安装,注意CRM不能安装在80端口,我前面就是安装在 5555 端口。
1. 网址准备(DNS映射)。
在域控服务器上(我这里全部程序都安装在一台电脑上)的服务器管理器上点击 工具 > DNS,右击前面建立的域,选择菜单项如下:
填入的信息如下:名称为意义的即可,IP地址指向 ADFS 安装的服务器IP,然后点击 添加主机。
总共需要增加的主机如下,第一个前面步骤已经建立好了,其余的建立步骤如前面的ADFS主机,因为我这里全部角色都是在同一台机器,所以指向的IP都是相同的。
名称 | IP地址 | 说明 |
ADFS | 安装AD FS的服务器IP | |
AUTH | 安装CRM的服务器IP | |
DEV | CRM发现服务所在的服务器IP | 一般和CRM服务器是同一台机器 |
INTERNALCRM | 安装CRM的服务器IP | 内部用来访问CRM的地址 |
CRM组织名称 | 安装CRM的服务器IP | 我的组织是Demo,所以这里的名称我填写DEMO |
建立完成后如下图: 最好清除下缓存,然后确定能ping通这些主机。
2. 开放相关端口允许入站
https必须要启用,默认的https端口是443,用于ADFS,当然,通过参考 inogic 的文章 How to change the Port of ADFS 3.0 (Windows server 2012 R2) to 444 ,也开始可以让Windows Server 2012 R2上的AD FS使用其他端口,这样CRM就可以使用443端口,我于2016年3月24日实验成功。还需要用到一个端口给CRM网站,我这里打算使用446,当然原来的CRM网站的5555端口也需要打开。
在服务器管理器中点击 工具 > 高级安全Windows防火墙。
在弹出窗口中右击 入站规则,选择 新建规则。
选择 端口 ,点击下一步。
选择 TCP,输入端口号,我这里是输入 443,446,5555 ,然后点击下一步。
保持不变,点击下一步。
保持不变,点击下一步。
输入一个有意义的名称后,点击完成按钮。
3. 证书相关工作
当然你可以购买证书,我这里是测使用,所以自制证书。
之前我已经安装了 Active Directory证书服务(没有安装的可以通过添加角色和功能向导进行添加),这时候服务器管理器会有通知,点击相应链接。
第一页确认下,点击 下一步。
选择前两项,点击下一步。
保持不变,点击下一步。
保持不变,点击下一步。
保持不变,点击下一步。
保持不变,点击下一步。
保持不变,点击下一步。
保持不变,点击下一步。
保持不变,点击下一步。
查看信息无误后,点击 配置 按钮。
一会儿配置成功了,点击关闭按钮关闭它。
我们去 工具 > 证书颁发机构 看看
就会发现多了一个 证书颁发机构。
然后我们去申请证书,点击 工具 > Internet Information Services(IIS)管理器。
点击左边的机器名称,双击右边的 服务器证书。
点击右边的 创建证书申请,在弹出的对话框中输入还是的信息,主要是通用域名别填写错了,要使用 * 这个通配符,然后点击下一步。
保持默认,点击下一步。
输入一个文件名,然后点击完成。
打开Powershell,输入命令 certreq -submit -attrib "CertificateTemplate: WebServer" C:\CRMCertRequest.txt
会弹出对话框,点击确定按钮。
选择好保存路径,并为证书取个名字,然后点击保存按钮。
在IIS管理器中的右边的操作栏点击 完成证书申请,出来的窗口中选择刚才制作的证书,并输入一个好记名称,然后点击确定按钮。
可以看到服务器证书上增加了刚才我们制作的证书了。
然后在左边展开网站节点,选中 Default Web Site,在右边的操作点击 绑定,在弹出的网站绑定对话框中点击 添加 按钮,在继续弹出的 添加网站绑定 中设定如下图,类型要选择 https,端口保持默认443不变,SSL 证书选择我们前面制作的证书,然后点击确定按钮关闭这两个弹出窗口。
同样的方法为 Microsoft Dynamics CRM网站增加一个和前面步骤类似的https绑定,不过我这里使用另外一个端口,我这里使用的是446端口,当然不是说一定要使用 446 端口,也可以使用其他没有被占用的端口。
还需要确保Microsoft Dynamics CRM网站对应的应用程序池 CRMAppPool 的标志对前面制作的证书有读取权限。我们可以看到这个标志是 NetworkService 。
打开PowerShell,输入 mmc ,就会弹出对话框,选择 文件 > 添加/删除管理单元 。
在 添加或删除管理单元 对话框中,从 可用的管理单元 中找到 证书 ,然后点击 添加 按钮,在弹出的 证书 管理单元 中选择 计算机账户 ,再点击 下一步 按钮。
在新窗口中保持不变,点击 完成 按钮,再点击 确定 按钮。
如下图所示,找到之前制作的证书,右击它,选择 所有任务 > 管理私钥。
点击添加按钮,搜索到 NETWORK SERVICE 这个账号,点击确定添加进去。
从安全性考虑,只授予这个账号 读取 权限即可,然后应用确定。
4. 添加Active Directory Federation Service 角色
因为在Windows Server 2012中,Active Directory Federation Service (后文简称ADFS)已经作为角色集成到操作系统中了,所以我这里使用 添加角色和功能 向导将其添加即可。若是Windows Server 2008则需要下载安装。
下一个页面直接点击 下一步。
点击 下一步。
点击 安装 按钮。
很快配置完成,点击 在此服务器上配置联合身份验证服务 这个链接。
保持默认选项,点击下一步。
保持不变,点击下一步。
SSL证书选择我们之前制作的证书,联合身份验证服务名称默认是*.luoyong.me,修改成 ADFS.luoyong.me,显示名称根据需要设置,然后点击下一步。
为了简便起见,我用域管理员账号,点击下一步。
保持不变,点击 下一步。
确认信息无误后,点击 下一步。
点击 配置 按钮开始配置。
一会儿提示我配置成功,点击关闭按钮关闭它。
这时候如果在浏览器中打开 https://adfs.luoyong.me/federationmetadata/2007-06/federationmetadata.xml ,你会发现是乱码,囧,右击,将文档编码改成 UTF-8,正常了,但是还是非常不好看,因为没有显示XML的树状结构。将这个网站设置成用兼容性试图显示就好了。
5. 为CRM配置基于声明的身份验证
进入到服务器的Metro界面,找到 部署管理器,打开它。
右击 Microsoft Dynamics CRM,选择 属性。
切换到Web 地址这个tabpage。
将绑定类型改成 https ,并这四个地址改成如下的样子,并点击应用, 确定按钮,
再点击 配置基于声明的身份验证 链接。
第一页点击下一步,到第二页输入网址:https://adfs.luoyong.me/federationmetadata/2007-06/federationmetadata.xml ,然后点击下一步。
这一页选择我们前面制作的证书,然后点击 下一步。
系统检查没有问题的话,点击下一步。
在这个页面点击 应用 按钮。
很快就到了完成页面,点击 查看日志文件 链接,将日志文件最后的URL复制下来,我这里是 https://internalcrm.luoyong.me:446/FederationMetadata/2007-06/FederationMetadata.xml 。
将其面的URL在IE中显示,确保能够正常显示。
6. 在AD FS服务器上设定基于声明的认证
在服务器管理器上点击 工具 > AD FS管理。
在左边打开找到 声明提供方信任 ,然后在右边右击 Active Directory ,选择 编辑声明规则。
点击 添加规则 按钮。
保持不变,点击下一步。
声明规则名称我这里输入 UPN Claim Rule,你可以使用别的名字,其余的照我的截图设置,然后点击 完成 按钮,最后点击 应用 和 确定按钮。
右击信赖方信任,选择 添加信赖方信任。
在欢迎页面,点击 启动 按钮。
在第一个选项中填入我们前面步骤复制下来的地址,我这里是 https://internalcrm.luoyong.me:446/FederationMetadata/2007-06/FederationMetadata.xml ,然后点击下一步。
显示名称我这里改为 CRM Claims Relying Party ,然后点击下一步。
保持默认,点击 下一步。
保持默认,点击 下一步。
保持默认,点击 下一步。
保持默认,点击 关闭 按钮。
在新弹出的窗口中,点击 添加规则 按钮。
声明规则模版改成 经历或筛选传入声明,点击下一步。
声明规则名称我设置为 Pass Through UPN ,传入声明类型我选择 UPN,然后点击完成按钮。
在添加一个规则,模版选择 经历或筛选传入声明,点击下一步。
我这里将声明规则名称设置为 Pass Through Primary SID ,传入声明类型选择 主 SID,然后点击 完成 按钮。
还要添加一个规则,模版选择 转换传入声明 ,点击下一步。
声明规则名称我设置为 Transform Windows Account Name to Name,传入声明类型我选择 Windows 帐户名,传出声明类型选择 * 名称,然后点击 完成 按钮,点击 应用 ,确定 按钮。
然后重启IIS,方法:打开 PowerShell,输入 IISRESET,看到重启成功即可。
打开IE浏览器,打开它的 Internet 选项,转到 安全 这个tabpage,选中本地Intranet 图标,再点击站点,将 https://internalcrm.luoyong.me 和 https://adfs.luoyong.me 加入到本本地Intranet中。
再打开 IE浏览器,输入网址 https://internalcrm.luoyong.me:446 ,发现会自动登陆并且打开了。
5. 为CRM配置面向Internet的部署
在CRM部署管理器中,点击 配置面向Internet的部署 链接,第一页直接点击 下一步按钮。
我这里的输入如下所示,然后点击 下一步 按钮。
保持不变,点击 下一步。
系统检查没有问题的话,点击 下一步。
点击 应用 按钮。
点击 完成 按钮。
回到AD FS管理中,添加 信赖方信任。
第一个页面点击 启动 按钮。
联合元素地址我输入 https://auth.luoyong.me:446/FederationMetadata/2007-06/FederationMetadata.xml ,然后点击下一步。
显示名称我这里更改成 CRM IFD Relying Party ,然后点击 下一步。
保持默认,点击下一步。
保持默认,点击 下一步。
点击下一步。
点击 关闭 按钮。
然后和前面的步骤类似,添加三个 添加规则,我这里就只是截图给大家看了。
完成后三个规则如下图所示,然用点击 应用 , 确定 按钮。
最后通过 https://demo.luoyong.me:446/ 来测试访问,报错,囧。
查 看日志,报错信息包 括:Microsoft.IdentityServer.Service.Policy.PolicyServer.Engine.InvalidAuthenticationTypePolicyException: MSIS7102: STS 上不支持请求的身份验证方法。
我后来在 https://community.dynamics.com/crm/f/117/t/114725.aspx 找到了解决方法,POSTED BY CHRIS@BAG
ON 17 DEC 2013 10:40 AM,
I solved the last Issue by Setting the correct spn. So everything is working now.
TODOs for getting CRM IFD / ADFS 2.2 working:
1. Setting correct SPN
2. Adding Forms Authentication to the Intranet Authentication Methods (Global Settings in the ADFS Management Shell ... located under "Authenication Policies - Primary Authentication").
它这个意思我是明白了,我打开PowerShell,执行如下命令:
setspn -a http/adfs.luoyong.me luoyong.me\CRM2013
然后打开 AD FS管理,选中身份验证策略,看到右边有个全局设置,身份验证方法的Intranet仅支持 Windows身份验证,囧。 点击旁边的编辑。
在弹出的对话框中将 Intranet下面的 表单身份验证 前面的复选框选中,然后点击应用按钮。
然后我再次输入 https://demo.luoyong.me:446/ 来测试访问,这次出现登陆页面了,输入用户名和密码,点击登录。
发现登陆成功了,哈哈。
我在外面的物理机要能登陆,要解决两个问题。
第一个问题,DNS解析的问题,我这里就是用记事本打开 C:\Windows\System32\Drivers\etc\hosts 这个文件,增加三行如下:
192.168.1.113 adfs.luoyong.me
192.168.1.113 auth.luoyong.me
192.168.1.113 demo.luoyong.me
然后用IE打开会发现此网站的安全证书有问题,囧。这是因为我们是自制的证书,当然有解决办法。将服务器上的证书导出来,安装到客户端即可。
还是通过PowerShell输入 mmc 并添加证书 到控制台,找到个人 证书下面那个颁发给和颁发者相同的证书,右击,选择 所有任务 > 导出。
第一页直接点击下一步,下面页面保持默认,也就是选择 不 那个选项,点击下一步。
下面页面保持默认,点击下一步。
文件名我设置如下,点击下一步。
最后页面点击 完成 按钮,然后就告诉你导出成功了。
将导出的证书复制到客户端,双击它,在弹出的对话框中点击 安装证书。ps,这种安装方法让我想起了12306网站安装证书,花那么多钱做个网站,居然舍不得花一点点钱买个证书,而是让用户手工去安装证书。。。
存储位置我选当前计算机吧,点击下一步。
碰到用户账户控制提示,点击是,在下面页面,记得要将证书存储到 受信任的根证书颁发机构,然后点击下一步。
最后页面点击完成按钮,很快提示导入成功,关闭相关的窗口。
刷新下浏览器,可以看到没有警告了,自动跳到输入用户名和密码界面了。
输入正确的用户名和密码,点击登陆按钮,登陆成功过了,哈哈。
如果我在Outlook中使用CRM的话会报错,错误信息如下,囧.
Microsoft.Crm.Application.Outlook.Config.ServerForm._testConnectionButton_Click
08:33:25| Error| Error connecting to URL: https://demo.luoyong.me:446/XRMServices/2011/Discovery.svc Exception: Microsoft.Crm.CrmException: Credentials required
在 Microsoft.Crm.Outlook.ClientAuth.ClaimsBasedAuthProvider`1.AuthenticateClaims()
在 Microsoft.Crm.Outlook.ClientAuth.ClaimsBasedAuthProvider`1.SignIn()
在
Microsoft.Crm.Outlook.ClientAuth.ClientAuthProvidersFactory`1.SignIn(Uri
endPoint, Credential credentials, AuthUIMode uiMode,
IClientOrganizationContext context, Form parentWindow, Boolean
retryOnError)
在
Microsoft.Crm.Application.Outlook.Config.DeploymentsInfo.DeploymentInfo.LoadOrganizations(AuthUIMode
uiMode, Form parentWindow, Credential credentials)
在
Microsoft.Crm.Application.Outlook.Config.DeploymentsInfo.InternalLoadOrganizations(OrganizationDetailCollection
orgs, AuthUIMode uiMode, Form parentWindow)
用fiddler来检查发现是访问不了:
https://adfs.luoyong.me/adfs/services/trust/mex
它返回503 Service unavailable 。
后来我终于找到解决问题的方法了,见这篇文章:http://blogs.technet.com/b/bshastri/archive/2014/03/20/dynamics-crm-ifd-on-windows-server-2012-r2-adfs-crm-addin-for-outlook.aspx
解决办法很简单,打开ADFS服务器,使用PowerShell输入如下命令:
Set-ADFSProperties –nettcpport 809
然后重新启动 Activie Directory Federation Services 即可。
执行Set-ADFSProperties 如果报类似如下的错误
请先在PowerShell中执行如下命令:
Add-PSSnapin Microsoft.Adfs.PowerShell
再执行Set-ADFSProperties的命令。
后来我发现MSDN上面的文章也有说,请看: http://technet.microsoft.com/en-us/library/hh699726(v=crm.6).aspx
Enable forms authentication
By default, forms authentication is disabled in the intranet zone. You must enable forms authentication by following these steps.
1. Log on to the AD FS server as an administrator.
2. Open the ADFS management wizard.
3. Click Authentication Policies > Primary Authentication > Global Settings > Authentication Methods > Edit.
4. Click (check) Form Based Authentication on the Intranet tab.
我使用outlook client来访问
打开了,使用正常,哈哈。
原文地址:http://wenzengliu.blog.51cto.com/9378751/1788518