搭建 ADFS 之后,默认已经开启了 Oauth2.0.
注意添加或者使用已有的 信赖方信任 , 增加一个自己的标识符
参考 https://blog.scottlogic.com/2015/03/09/OAUTH2-Authentication-with-ADFS-3.0.html
http://www.gi-architects.co.uk/2016/04/setup-oauth2-on-adfs-3-0/
如果遇到:
error=invalid_resource&error_description=MSIS9602%3a+The+received+%27resource%27+parameter+is+invalid.+The+authorization+server+can+not+find+a+registered+resource+with+the+specified+identifier.
说明 未信任 或者 标识符传错了
以下为具体的实验过程:
发送
POST /adfs/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: your.adfs.server
Content-Length: <some number>
grant_type=authorization_code&client_id=some-uid-or-other&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2FgetAToken&code=thecode
遇到错误:
{
"error": "invalid_request",
"error_description": "MSIS9609: The 'redirect_uri' parameter is invalid. No redirect uri with the specified value is registered for the received 'client_id'. "
}
特么的 竟然是因为 URL encode 了 redirect_uri . 因为是 POST,不用encode 这个参数.
5.获取Token:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IjBzTVZIOXlVdFlyaFhCd0hOcTdRejZrRm5XZyJ9.eyJhdWQiOiJ1cm46cmVseWluZzpwYXJ0eTp0cnVzdDppZGVudGlmaWVyIiwiaXNzIjoiaHR0cDovL1dJTi1SOUpOVU5LQ0VMSi5yaW5zeXMuY29tL2FkZnMvc2VydmljZXMvdHJ1c3QiLCJpYXQiOjE1NjE0NTQzOTQsImV4cCI6MTU2MTQ1Nzk5NCwidXBuIjoiQWRtaW5pc3RyYXRvckByaW5zeXMuY29tIiwidWlkIjoiQWRtaW5pc3RyYXRvciIsInN1YiI6ImFkbWluaXN0cmF0b3JAcmluc3lzLmNvbSIsImF1dGhfdGltZSI6IjIwMTktMDYtMjVUMDk6MDA6MzAuMTAyWiIsImF1dGhtZXRob2QiOiJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZFByb3RlY3RlZFRyYW5zcG9ydCIsInZlciI6IjEuMCIsImFwcGlkIjoidG9kZCJ9.R7YOyp986M6sYPrjyCI5JAVEZ0XTat9i89Hi8PeV4xQbe5NLrjO6CqpN2v_C_sCj5PgGyBMkAHKX4Bgyf3s4eisilrsU7t08td2nYU05rzHL8IHF_Emv0B2s0OsbY5kkACI8iYAW0rQ7ZpfUitWgygTR-GtvBnZfAfn65OpEX87Gt_x6hXL88Oacia9Le1tBFX3MiK3ShrsIv4LrSaFw5HxfN_yfieZqxndmuXOL3tcna1jyamUdmMa4WcfdNwSRlxwVlUZvbGYxSHXgSwfUvak_zkekAEFI5QtNup85ZBp1JPehlXePOBLJ_ZGErIbt-5lmHT6uX2H--qKGEFbYeg",
"token_type": "bearer",
"expires_in": 3600,
"refresh_token": "_bhAioyNOFP-uPNqFdMUf3SW4RIyMaRcW1uFsnTohr4AAQAAKHBS9_LiM8OMqOH7mNv6JT_D1fm3LilU-bJGPi-6uHvW-mSkDHqgqy2JhdAocmsNZ08Duzcf6PV5pO9Z-CX-4EvuYTC7silc043QLXl1MOOxhw2V5sC6hrjO5BsUWXLRoGKerWrCAaW1TwS1bb9G1XtTgGigX2UjvcN8Z0u9_RV-"
}
1. 一个公网IP地址,这个公网IP地址是需要发布ADFS服务,从而在从AzureAD重定向到ADFS服务时能找到。实际环境中,可以使用ADFS Proxy或者Windows Application
Proxy,或者其他反向代理将ADFS发布出来。测试环境中,我们会Azure的虚拟机,因为Azure虚拟机所在的Cloud
Service提供了一个公网地址。
2. 一个公网证书,这是客户端通过https的ADFS服务时需要的证书,测试环境中我们就不适用公网证书了,使用自建的CA服务器,缺点是客户端访问会报证书错误,或者得提前在客户端安装证书,但这不影响实际功能使用。
3. DC
4. ADFS
5. 公网域名
以下测试环境中需要使用Azure,至少需要一个Azure订阅,具体步骤如下
1. 首先登陆Azure的门户,在网络中创建一个虚拟网络
2. 创建完成后,我们创建2个Server 2012 r2 虚拟机,一台为DC,一台为ADFS。在虚拟机的设置里,网络选择我们刚刚创建的CorpNet,针对ADFS,我们需要在端口上把HTTPS和HTTP都打开。
3. 在创建过程中,我们先下载一下Azure的PowerShell组件,我们需要为这两个虚拟机固定一下IP地址。
注:Azure Powershell是需要.net framework 4.5的,所以如果你目前的PC是Win7或者更老版本的话,请安装.NET framework 4.5
4.
使用MSTSC远程登陆创建好的DC和ADFS,查看这两台服务器的目前分配得到的IP地址,这是用我们创建的CorpNet的DHCP分配的,我们需要
让他们固定使用这两个IP,以免在虚拟机重启后得到不一样的IP。特别是DC,我们必须保证DC和上面的DNS始终是用一个IP地址。
5. 记录下来后打开我们安装好的Azure PowerShell,首先连接到我们的Azure账户
如果是中国的Azure
Add-AzureAccount -Environment azurechinacloud
如果是Global的Azure
Add-AzureAccount
6. 登录后,使用以下命令设定固定IP,替换你自己的虚拟机名字以及IP地址。
Get-AzureVM -Name corp-dc -ServiceName corp-dc| Set-AzureStaticVNetIP -IPAddress 10.0.0.6 | Update-AzureVM
Get-AzureVM -Name corp-adfs -ServiceName corp-adfs | Set-AzureStaticVNetIP -IPAddress 10.0.0.5 | Update-AzureVM
注: 这里我们设定的是固定的内部IP,Azure支持设定固定的外部IP地址,这里不详细介绍,具体方法请参阅http://msdn.microsoft.com/en-us/library/azure/dn690120.aspx
7. 设置完成后,我们在DC上,安装DC、DNS的角色。忽略关于DNS的非静态IP的报错。
8. 安装完成后,在服务器管理器中选择将此台服务器提升为域控。创建一个新的域。其中在域名这一块,填入你公网域名相同的名字,或者子域名。
我拥有jashuang.cn,我这里使用了子域名corp1.jashuang.cn作为我的域,你也可以使用一级域名。
然后一路下一步直到安装。
9. 安装完成后重启DC。
10. 然后我们在DC上安装我们的证书服务,然后一路下一步直到安装。
11. 安装完成后,选择配置,在角色服务上,选择证书颁发机构,然后一路下一步,然后选择配置。
12. 完成后,我们需要新建一张SSL的证书,用户ADFS的HTTPS通信。运行命令certsrv.msc,在证书模板上右击,选择管理
13. 在新窗口招到web服务器证书,右击选择复制模板。在常规标签项,命名为ADFS SSL。
进入安全选项卡,添加 domain users,domain computers,权限选择注册和读取
进入使用者名称 选项卡, 使用者名称格式变为:公用名,勾选 DNS 名
14. 回到证书颁发机构,右击证书模板,点击新建要颁发的证书模板,选择ADFS SSL
15. 然后,运行命令domain.msc,打开域和信任管理窗口,我们需要添加UPN名。右击Active Directory域和信任关系,选择属性。在UPN标签项填入我们的域名,点击添加 – >应用 – >完成。
15. 到此,我们把DC配置完成了。现在先登录到Azure的门户,打开我们之前创建的虚拟网络,在配置选项里,我们需要指定虚拟网络的DNS,将他指向DC,再添加一个指向Azure public DNS的记录(否则外网无法解析),然后点击保存。
16. 重启一下ADFS。然后将ADFS加入域中。重启后使用域管理员登录。
17. 现在我们在ADFS的HOST文件(路径C:windowssystem32driversetcHosts)中加2条DNS记录,按照自己的域名和DC名以及IP地址加入这两条记录,主要是为了防止DNS解析出现问题时能找到DC。
corp1.jashuang.cn 10.0.0.6
corp-dc.corp1.jashuang.cn 10.0.0.6
18. 之后需要安装之前我们的证书。打开 MMC, 点击文件-添加、删除管理单元,选择计算机账户, 选择本地计算机,点击确定,右击 个人,点击 所有任务—申请新证书,一直点击下一步,在证书注册中选择ADFS SSL。然后选择注册
19 安装证书完成后,在DC服务器上打开Powershell,运行以下命令。
Add-kdsrootKey –effectivetime (get-date).addhours(-10)
New-adserviceaccount fsgmsa –dnshostname corp-adfs.corp1.jashuang.cn –serviceprincipalnames http/corp-adfs.corp1.jashuang.cn
20. 然后回到ADFS,在ADFS上安装ADFS角色
21. 完成后,点击配置ADFS。在指定服务属性里,选择我们之前导入的证书,在服务账号选择fsgmsa,然后一直下一步直到配置完成。
23. 配置完成后,安装Web服务器角色,这主要是为了安装IIS管理器。
24. 安装完成后,打开IIS管理器, 右击Default Website,选择编辑绑定,点击添加,然后添加HTTPS,证书选择之前我们导入的证书。
22. 配置完成后,可以打开IE,输入以下网址,尝试登录,简单测试ADFS是否正常。
1、进入设置
首先打开手机,进入设置点击通用,点击进入。
2、进入描述文件
之后单击描述文件和设备管理。
3、选择描述文件
点击需要根据个人需要更改的描述文件,点击。
4、信任app
之后设置完成后,APP已被信任,就可以使用来。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)