是否可以在 Microsoft.Identity.Web 中为令牌获取设置发现 URI?

问题描述

我有一个 .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/AppConfig/AbstractApplicationBuilder.cs#L51

        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.cs#L95

但我无法在 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

然后使用空的 ApplicationConfiguration 对象创建一个新的 ConfidentialClientApplicationBuilder,因此 CustomInstancediscovery 始终为空

            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/ConfidentialClientApplicationBuilder.cs#L42

所有的钩子似乎都在那里,所以我觉得我缺少一些配置,但它也可能是一个功能/错误请求。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)