Конечная точка принадлежит другому органу

Пытается использовать 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-конфигурации?

С уважением

4 ответа

Вы могли бы найти решение для этого? Единственный способ выяснить (далеко не оптимальное решение) - добавить конечные точки в список дополнительных базовых адресов конечных точек. В противном случае вы должны установить для проверки значение 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, вы увидите, что проверка конечных точек по умолчанию проверяет их, выполняя метод «начинается с». https://github.com/IdentityModel/IdentityModel/blob/1db21e2677de6896bc11227c70b927c502e20898/src/Client/StringComparisonAuthorityValidationStrategy.cs#L46

Тогда единственные два обязательных дополнительных адреса AdditionalEndpointBaseAddresses внутри поля политики DiscoveryDocumentRequest, которые вам нужно добавить, - это "https://login.microsoftonline.com/<guid>" а также "https://graph.microsoft.com/oidc/userinfo".

У меня была такая же проблема, и когда я обновил IdentityModel до версии 2.16.1, проблема была решена.

Похоже, что для Azure AD требуется настройка дополнительных конечных точек, поскольку @flacid-snakeпредложенный. Установка проверочных конечных точек на False представляет собой угрозу безопасности, и ее следует избегать.

Лучший способ - сделать его настраиваемым, предпочтительно в пользовательском интерфейсе при настройке сервера единого входа. Конечные точки могут изменяться, и их должно быть легко изменить. Это также упростит задачу, если позже вы решите поддерживать Okta или других поставщиков, и им потребуются дополнительные конечные точки.

С июня 2021 года вам также необходимо включить конечную точку Kerberos, например:https://login.microsoftonline.com/888861fc-dd99-4521-a00f-ad8888e9ecc8bfgh/kerberos (замените своим идентификатором клиента каталога).

Другие вопросы по тегам