如何从单个服务端点发出和验证jwt?

时间:2018-09-27 21:18:00

标签: asp.net-core oauth-2.0 jwt

我已经成功地在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";
    }

我希望这是有道理的,感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

如何将以下逻辑“移动”到单独的Web API中以进行令牌验证?

您要移动的逻辑是ASP.NET Core身份验证中间件的一部分,其中包括这些职责。

  1. 从HTTP请求的Authorize标头中读取访问令牌(承载令牌),
  2. 验证该访问令牌,
  3. 显示访问令牌对Authorize属性的声明。

在这种情况下,访问令牌被编码为JWT。

听起来您想在单独的服务器上执行步骤(2)。如果是这种情况,您可能正在寻找 OAuth自省。

GitHub上有一些extensions for that here。另外,AspNet.Security.OAuth.Extensions Error while introspection问答将帮助您为OAuth自省配置这些扩展名。