由于ADFS 4.0隐式流程并未在id_token中返回自定义声明,因此我尝试从userInfo端点获取这些声明。要获取userinfo端点的访问令牌,必须使用资源urn:microsoft:userinfo。因此,要获取资源的访问令牌和客户端的ID令牌,必须发送两个查询。
之后,userinfo端点只用
响应{
"sub": "fRwBBEb3bOu6Pt/xHsS0/Z5TKn24llZ3FGFMT+LP9QA="
}
自定义声明在access_token中始终可用,如果我在查询令牌端点时使用response_mode = form_post,那么它们也在id_token中。表格不适合SPA。 userinfo是否应该返回任何有用的内容?
答案 0 :(得分:1)
它可以例如Azure AD端点返回的内容要多得多,但这就是ADFS团队实现此目的的方式。
您可以要求通过uservoice返回更多声明。
答案 1 :(得分:0)
根据ADFS FAQ,显然,ADFS 2016用户信息端点返回的内容不超过主题声明:
ADFS用户信息端点始终返回OpenID标准中指定的主题声明。 AD FS不提供通过UserInfo终结点请求的其他声明。如果您需要ID令牌中的其他声明,请参阅AD FS中的“自定义ID令牌”。
答案 2 :(得分:0)
我已经用它解决了我的问题https://www.michaelboeynaems.com/keycloak-ADFS-OIDC.html
解决方案包括在令牌中返回您想要的声明,而不是尝试通过 userInfo 获取该信息,因为正如 Tosh 所说,返回 only subject claim.
Microsoft 官方文档,shows how to put the claims in your token,但我只在上面提到的博客中找到了一些技巧(即使在完全理解之后,我还是在 Microsoft 文档中看到了所有内容)。