Конечная точка принадлежит другому органу
Пытается использовать 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 (замените своим идентификатором клиента каталога).