使用 Azure AD 的 Spring boot oauth2 客户端,但通用tenantID

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

我已经使用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 与外部用户集成的正确方法是什么?

azure-active-directory spring-security-oauth2
1个回答
0
投票

您在conf中作为

issuer-uri
输入的值必须与令牌中
iss
声明的值完全相同(即使尾部斜杠(如果有)也很重要)。

如果您想要接受的代币有多个可能的发行人,那么您就处于典型的多租户场景。如果所有这些租户在启动时都是已知的(例如

https://login.microsoftonline.com/XXXXXXXXXXX/v2.0
https://login.microsoftonline.com/common/discovery/v2.0
),那么您可以通过配置身份验证管理器来实现“静态”多租户,如 “通过声明解析租户”中所述我链接的文档的 部分,或者使用 my starter ,它允许仅使用应用程序属性来完成此操作。

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