Можно ли установить URI обнаружения для получения токена в Microsoft.Identity.Web?

У меня есть приложение .NET5, которое использует Microsoft.Identity.Web для безопасного API. При попытке получить токен доступа:

      var accessToken = await _tokenAcquisition.GetAccessTokenForAppAsync(scopesToAccessDownstreamApi);

Первое, что происходит, - это запрос к конечной точке обнаружения:

      https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=.......%2Fauthorize

У меня есть статические полномочия, указанные в моей конфигурации, которые, как я думал, следует использовать вместо этого. Для моего приложения Blazor он работает нормально. MS.Identity.Web сначала получает мою ключевую информацию в мои полномочия:

      https://myCustomAuthority/myTenantId/oauth2/v2.0/.well-known/openid-configuration

Однако с tokenAcquisition он всегда вызывает login.microsoft.com, терпит неудачу и, наконец, перенаправляет на мою конечную точку.

Копаясь в кодах MS.Identity.Web и MS.Identity.Client, они определенно имели это в виду.

      /// Allows developers to configure their own valid authorities. A json string similar to https://aka.ms/aad-instance-discovery should be provided.

Смотрите здесь: https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/blob/ac7541c1aa1c7bdbb20df5c7e72628161f826f44/src/client/Microsoft.Identity.Client/AppConfigcs/AbstractApplication

              public InstanceDiscoveryResponse CustomInstanceDiscoveryMetadata { get; set; }
    public Uri CustomInstanceDiscoveryMetadataUri { get; set; }

А здесь:https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/blob/ac7541c1aa1c7bdbb20df5c7e72628161f826f44/src/client/Microsoft.Identity.Client/AppConfig/ApplicationConfiguration

Но я не могу найти его на стороне API. И когда я смотрю на TokenAquisition, он вызывает ConfidentialClientApplicationBuilder.CreateWithApplicationOptions

                      var builder = ConfidentialClientApplicationBuilder
                    .CreateWithApplicationOptions(_applicationOptions)
                    .WithHttpClientFactory(_httpClientFactory);

https://github.com/AzureAD/microsoft-identity-web/blob/b106d9a9250522d0bf9ed0e78e0e3dbd376d8170/src/Microsoft.Identity.Web/TokenAcquisition.cs#L583

Затем создается новый ConfidentialClientApplicationBuilder с пустым объектом ApplicationConfiguration, поэтому CustomInstanceDiscovery всегда имеет значение null

                  var config = new ApplicationConfiguration();
        var builder = new ConfidentialClientApplicationBuilder(config).WithOptions(options);

https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/blob/ac7541c1aa1c7bdbb20df5c7e72628161f826f44/src/client/Microsoft.Identity.Client/AppConfig/ConfidentialLilderApplication

Кажется, что все хуки есть, поэтому я чувствую, что мне не хватает какой-то конфигурации, но это также может быть запрос функции / ошибки.

1 ответ

Это был фактический дефект, исправленный командой Microsoft.Identity.Web. Я задал тот же вопрос команде:https://github.com/AzureAD/microsoft-identity-web/discussions/1202 .

И они создали проблему:https://github.com/AzureAD/microsoft-identity-web/issues/1212 .

Итак, это было исправлено в сборке 1.13.

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