设置:
我们有一个应用程序需要借助 ADFS 对 API 进行身份验证。为此,似乎适合使用 Client Credentials Grant Flow;
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
- 客户秘密:(一些指导)
网络接口:
- 依赖方:client1
- 访问控制策略:允许所有人
- 客户端权限 --> 客户端应用程序:client1
- 允许的范围:openid profile 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
- 客户秘密:(一些指导)
网络接口:
- 依赖方:client1、client2
- 访问控制策略:允许所有人
- 客户端权限 --> 客户端应用程序:client1,client2
- 允许的范围:openid profile allatclaim
然后,当我使用 client2(client_id 和 client_secret)的凭据请求 JWT 令牌时,我得到:
"aud": "microsoft:identityserver:client1"
如果我使用client1也是一样的。我尝试在 Web API 中添加不同的依赖方,它似乎总是将 JWT 中的 aud 设置为列表中的第一个 RP(字母顺序)。例如,如果我还在 Web API 中添加 123 作为 RP,那么对于 client1 和 client2,“aud”将变为“microsoft:identityserver:123”。
如果我改为删除所有依赖方并将 url 添加到我的 api 中,则 JWT 令牌中的 aud 将变为“urn:microsoft:userinfo”。
根据我的阅读,JWT 令牌中的 aud 字段应包含将处理 JWT 令牌的所有委托人。见https://www.rfc-editor.org/rfc/rfc7519#section-4.1.3。
问题:
应该如何设置我的应用程序组才能拥有多个客户端?
ADFS 可以发送多个受众而不是只发送第一个受众吗?
还是我使用了错误的方法?
亲切的问候,杰斯珀