端点属于不同的权限



尝试将 Azure AD 用作 OpenID 提供程序和 IdentityModel 包

但是,问题是它会产生错误的端点配置

var client = new HttpClient();
const string identityUrl = "https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/v2.0";
const string restUrl = "https://localhost:44321";
var disco = await client.GetDiscoveryDocumentAsync(identityUrl);
if (disco.IsError)
{
    Console.WriteLine(disco.Error); 
    return;
}

返回错误

端点属于不同的权限: https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/oauth2/v2.0/authorize

OpenID 配置输出为

{"authorization_endpoint":"https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/oauth2/v2.0/authorize",
"token_endpoint":"https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/oauth2/v2.0/token" ... }

oauth2 在 tenatID 和版本之间添加。我想这就是 openid 元数据验证失败的原因。

是否可以配置 AzureAD 以返回 openid 配置的正确元数据?

问候

你能找到解决方案吗?我能弄清楚的唯一方法(到目前为止是最佳解决方案(是将端点添加到其他端点基址列表中。否则,您必须将验证设置为 false,如上面的注释中所述。

var client = httpClientFactory.CreateClient();
       var disco = await client.GetDiscoveryDocumentAsync(
            new DiscoveryDocumentRequest
            {
                Address = "https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/v2.0",
                Policy =
                {
                    ValidateIssuerName = true,
                    ValidateEndpoints = true,
                    AdditionalEndpointBaseAddresses = { "https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/oauth2/v2.0/token",
                                                        "https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/oauth2/v2.0/authorize",
                                                        "https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/discovery/v2.0/keys",
                                                        "https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/oauth2/v2.0/devicecode",
                                                        "https://graph.microsoft.com/oidc/userinfo",
                                                        "https://login.microsoftonline.com/00edae13-e792-4bc1-92ef-92a02ec1d939/oauth2/v2.0/logout"
                                                      }
                },
            }
        );

如果您查看 IdentityModel 存储库中的代码,您会发现端点的默认验证通过执行"start with"方法来验证它们。 https://github.com/IdentityModel/IdentityModel/blob/1db21e2677de6896bc11227c70b927c502e20898/src/Client/StringComparisonAuthorityValidationStrategy.cs#L46

然后,您需要添加的"发现文档请求策略"字段中唯一两个必需的 AdditionalEndpointBaseAddresses,即 "https://login.microsoftonline.com/<guid>""https://graph.microsoft.com/oidc/userinfo"

我也遇到了同样的问题,当我将 IdentityModel 升级到 2.16.1 版时,问题解决了

Azure AD 似乎需要按照@flacid-snake建议的其他终结点配置。将验证终结点设置为False是一种安全威胁,应避免使用。

最好的方法是使其可配置,最好在配置 SSO 服务器时在 UI 中配置。终结点可以更改,并且应该易于更改。如果您以后决定支持 Okta 或其他提供程序并且它们需要额外的端点,这也将使其更容易。

自 2021 年 6 月起,还需要包含 Kerberos 终结点,例如:https://login.microsoftonline.com/888861fc-dd99-4521-a00f-ad8888e9ecc8bfgh/kerberos(替换为目录租户 ID(。

相关内容

  • 没有找到相关文章

最新更新