我有一个 .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);
所有的钩子似乎都在那里,所以我觉得我缺少一些配置,但它也可能是一个功能/错误请求。