ADFS 3.0 + Oauth2.0

ADFS 3.0 + Oauth2.0,第1张

搭建 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服务,从而在从Azure

AD重定向到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已被信任,就可以使用来。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7961734.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存