OAuth2无法对API进行身份验证



我的应用程序分为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"]}/"
};

最新更新