我有一个项目,其中包括一个Chrome扩展作为前端和一个ASP.NET Core 7 Web API作为后端。该项目正在使用Azure Entra ID进行OAuth认证。
使用该扩展,我能够成功地检索一个不记名令牌并将其传递给API。API似乎完全验证了令牌,但来自控制器的所有响应都是401状态。
下面是与身份验证/授权相关的Program.cs
代码:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
app.UseHttpsRedirection();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
这里是我设置的一个准系统控制器,用来测试auth:
[Authorize]
[ApiController]
[Route("controller")]
public class WeatherForecastController : ControllerBase
{
public WeatherForecastController()
{
}
[HttpGet]
public ActionResult<string> Test()
{
return "Hello";
}
}
下面是日志的输出(去除了令牌):
info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter\[0\]
Microsoft.IdentityModel Version: 6.32.3.0. Date 10/06/2023 10:56:55. PII logging is ON, do not use in production. See https://aka.ms/IdentityModel/PII for details.
IDX10242: Security token: '{}' has a valid signature.
info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter\[0\]
IDX10239: Lifetime of the token is valid.
info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter\[0\]
IDX10234: Audience Validated.Audience: ''
info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter\[0\]
IDX10245: Creating claims identity from the validated token: '{}'.
info: Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter\[0\]
IDX10241: Security token validated. token: '{}'.
1条答案
按热度按时间lndjwyie1#
根据您的描述,当您添加
[Authorize]
属性时出现401错误,而没有该属性时得到正确的响应,因此我们可以推测该问题与访问令牌有关。请允许我先在web API中共享我的配置。除了你分享的代码,我在appsettings.json中有这样的配置:
因为我只使用了
[Authorize]
属性,所以无论令牌包含roles
还是scope
,都是可以的,这意味着无论我们使用auth代码流还是客户端凭据流来生成令牌,我们都是有效的。换句话说,如果令牌包含正确的角色或正确的SCP,则令牌是有效的。你可以解码你的令牌来检查它是否包含正确的声明。让我们看一个客户端凭证流令牌的示例。首先,我公开了一个具有应用程序类型和添加添加API权限的API。
然后我使用客户端凭证流来生成访问令牌。
有了这个令牌,我就可以调用这个API了。