我的应用程序分为API和UI的身份验证。UI包含:
ClientId、ClientSecret、Tenant、重定向URL
API包含:ApiClientId、APPID URI、租户
我可以使用以下方式获取访问令牌:ClientId作为client_id,API_ClientId作为作用域UI_ClientSecret当然还有租户
但当我通过AddMicrosoftIdentityWebApi在API端添加身份验证时,如下所示:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
Configuration.Bind("AzureAd", options);
options.Authority = $"{azureAdOptions.Instance}{azureAdOptions.TenantId}";
options.Audience = azureAdOptions.ClientId;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateAudience = true,
ValidateIssuer = true,
ValidIssuer = $"https://login.microsoftonline.com/{azureAdOptions.TenantId}/v2.0"
当发送请求时,im得到一般错误:";对象引用未设置为实例"没有任何细节。
当我尝试添加身份验证时,如:
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options =>
{
Configuration.Bind("AzureAd", options);
});
我收到未经授权的错误消息。
appsettings.json:中的AzConfig
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "domain",
"TenantId": "tenantId",
"ClientId": "ApiClientId",
"ApiScopes": "https://xxx/tenatnId/APIAccess/Name.API"
}
请告诉我可能错过了什么,因为它让我发疯了。
你不使用内置的微软东西有什么原因吗:
services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = configuration["Authentication:Microsoft:ClientSecret"];
});
请参阅:https://learn.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins?view=aspnetcore-6.0
我需要指定有效的发行人,然后它才能按预期工作。
options.TokenValidationParameters.ValidIssuers = new[]
{
$"{Configuration["AzureAd:ValidIssuer"]}{Configuration["AzureAd:TenantId"]}/",
$"{Configuration["AzureAd:Instance"]}{Configuration["AzureAd:TenantId"]}/"
};