微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决是否可以在 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 举报,一经查实,本站将立刻删除。