我已经成功地在Angular前端Web应用程序和.Net Core Web API后端(用于获取数据)之间建立了基于令牌的授权系统。
现在,我想将JWT逻辑(生成和验证)整合到第三个Web API .Net Core项目中。
如何将以下逻辑“移动”到单独的Web API中以进行令牌验证?
在Startup.cs中:
System.Int32
并在控制器中:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidateAudience = true,
ValidAudiences = new List<string> { "Audience1", "Audience2" },
ValidIssuer = "Credit Card oAuth Web API",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("superSecretKey@345"))
};
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
我想保留角色的逻辑(之所以起作用,是因为这样在JWT中设置了声明):
[Authorize (Roles = "Credit Card Administrator")]
public ActionResult<string> Get(int id)
{
return "value";
}
我希望这是有道理的,感谢您的帮助。
答案 0 :(得分:1)
如何将以下逻辑“移动”到单独的Web API中以进行令牌验证?
您要移动的逻辑是ASP.NET Core身份验证中间件的一部分,其中包括这些职责。
Authorize
标头中读取访问令牌(承载令牌),Authorize
属性的声明。 在这种情况下,访问令牌被编码为JWT。
听起来您想在单独的服务器上执行步骤(2)。如果是这种情况,您可能正在寻找 OAuth自省。
GitHub上有一些extensions for that here。另外,AspNet.Security.OAuth.Extensions Error while introspection问答将帮助您为OAuth自省配置这些扩展名。