0

我有一个 .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

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

4

1 回答 1

0

这是 Microsoft.Identity.Web 团队已修复的实际缺陷。我向团队提出了同样的问题: https ://github.com/AzureAD/microsoft-identity-web/discussions/1202

他们创造了一个问题: https ://github.com/AzureAD/microsoft-identity-web/issues/1212

所以这在构建 1.13 中得到了修复。

于 2022-02-09T16:57:46.950 回答