[ADFS客户端凭据授予与应用程序组中多个客户端的通信流

问题描述 投票:0回答:1

SETTUP:我们有一个需要在ADFS的帮助下对API进行身份验证的应用程序。为此,使用客户端凭据授予流似乎是合适的;https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/ad-fs-openid-connect-oauth-flows-scenarios#client-credentials-grant-flow

因此,在ADFS中,我通过以下设置创建了带有服务器应用程序和Web API的新应用程序组,

服务器应用程序:-客户编号:client1-客户机密:(某些向导)

Web API:-依赖方:client1-访问控制政策:允许所有人-客户端权限->客户端应用程序:client1-允许的范围:openid个人资料allatclaim

然后我通过https://.../adfs/oauth2/token和[]请求令牌

client_id=client1
client_secret=(some-guid) 
grant_type=client_credentials

我按预期收到了带有aud和appid的JWT令牌:

"aud": "microsoft:identityserver:client1"
"appid": "client1"

问题:当我想添加另一个客户端以使用API​​时,问题就变成了。所以我将设置更改为

服务器应用程序1:-客户编号:client1-客户机密:(某些向导)

服务器应用程序2:-客户编号:client2-客户机密:(某些向导)

Web API:-依赖方:client1,client2-访问控制政策:允许所有人-客户端权限->客户端应用程序:client1,client2-允许的范围:openid个人资料allatclaim

然后,当我请求具有client2的凭据(client_id和client_secret)的JWT令牌时,得到:

"aud": "microsoft:identityserver:client1"

如果使用client1,也是一样。我试图在Web API中添加不同的依赖方,并且似乎总是将JWT中的aud设置为列表中的第一个RP(字母顺序)。例如,如果我还将123作为RP添加到Web API中,则client1和client2的“ aud”都将变为“ microsoft:identityserver:123”。

如果我改为删除所有依赖方,然后将url添加到我的api,则JWT令牌中的aud变为“ urn:microsoft:userinfo”。

根据我的阅读,JWT令牌中的aud字段应包含将处理JWT令牌的所有主体。参见https://tools.ietf.org/html/rfc7519#section-4.1.3

问题:应如何设置我的应用程序组以具有多个客户端?ADFS可以发送多个受众而不是仅发送第一个受众吗?还是我使用了错误的方法?

亲切的问候,杰斯珀

oauth-2.0 jwt adfs adfs4.0
1个回答
0
投票

通过反复试验,我终于找到了解决方法!

Web API中的

依赖方应该仅包含Web API的标识符(而不是服务器应用程序),例如,它可以是类似于“ https:///www.mywebapi.com”的地址。

客户端权限->客户端应用程序应包含应允许与此服务器对话的服务器应用程序。

然后,当从ADFS请求JWT令牌时,您还需要包括参数“ resource”,该值应该是Web API的标识符之一。因此,呼叫的呼叫主体变为

client_id=client1
client_secret=(some-guid) 
grant_type=client_credentials
resource=https:///www.mywebapi.com

我试图搜索资源字段以找到更多有关它的信息,但找不到任何解释或任何使用它的网站。

© www.soinside.com 2019 - 2024. All rights reserved.