问题描述
我有一个 .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.
public InstancediscoveryResponse CustomInstancediscoveryMetadata { get; set; }
public Uri CustomInstancediscoveryMetadataUri { get; set; }
但我无法在 API 端找到它。当我查看 TokenAquisition 时,它正在调用 ConfidentialClientApplicationBuilder.CreateWithApplicationoptions
var builder = ConfidentialClientApplicationBuilder
.CreateWithApplicationoptions(_applicationoptions)
.WithHttpClientFactory(_httpClientFactory);
然后使用空的 ApplicationConfiguration 对象创建一个新的 ConfidentialClientApplicationBuilder,因此 CustomInstancediscovery 始终为空
var config = new ApplicationConfiguration();
var builder = new ConfidentialClientApplicationBuilder(config).WithOptions(options);
所有的钩子似乎都在那里,所以我觉得我缺少一些配置,但它也可能是一个功能/错误请求。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)