我已经使用tenantID设置了azure参数,对于AD中我公司的用户来说一切正常。但我想验证外部用户的身份(用
"signInAudience": "AzureADandPersonalMicrosoftAccount"
清单)。
文档说我应该将 token 的租户 ID 替换为“common”并授权 url。
我已经配置了 spring boot oauth2 客户端
spring:
security:
oauth2:
client:
provider:
azure:
issuer-uri: "https://login.microsoftonline.com/XXXXXXXXXXX/v2.0"
token-uri: "https://login.microsoftonline.com/common/oauth2/v2.0/token"
authorization-uri: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize"
user-info-uri: "https://graph.microsoft.com/oidc/userinfo"
jwk-set-uri: "https://login.microsoftonline.com/XXXXXXXXXXX/discovery/v2.0/keys"
我有一个例外:
签名 JWT 被拒绝:需要另一种算法,或者找不到匹配的密钥 jwt 未经验证,没有任何匹配, jwt 标头中的孩子不在列表中
https://login.microsoftonline.com/XXXX/discovery/v2.0/keys
在另一个和,如果我设置
jwk-set-uri: https://login.microsoftonline.com/common/discovery/v2.0/keys
它包含正确的孩子,但令牌被拒绝,但出现以下异常:
[invalid_id_token] ID 令牌包含无效声明: {iss=https://login.microsoftonline.com/XXXXX/v2.0}
将 AzureAD 与外部用户集成的正确方法是什么?
您在conf中作为
issuer-uri
输入的值必须与令牌中iss
声明的值完全相同(即使尾部斜杠(如果有)也很重要)。
如果您想要接受的代币有多个可能的发行人,那么您就处于典型的多租户场景。如果所有这些租户在启动时都是已知的(例如
https://login.microsoftonline.com/XXXXXXXXXXX/v2.0
和 https://login.microsoftonline.com/common/discovery/v2.0
),那么您可以通过配置身份验证管理器来实现“静态”多租户,如 “通过声明解析租户”中所述我链接的文档的 部分,或者使用 my starter ,它允许仅使用应用程序属性来完成此操作。