使用者验证与授权 – Token Based Authentication:验证 JSON Web Token

昨天我们学会了在 ASP.NET Core Web API 发行 JSON Web Token 并且使用 https://jwt.io 网站所提供的测试工具验证所发行的 JSON Web Token 的内容确实有照我们的意思发行,今天再来学习,当《前端》拿着 JSON Web Token 回来请求任何需要授权要求的 API 服务时,如何验证该 Token 是否有效。


审核 JSON Web Token

首先,在 Web API 项目的 Startup.cs 的 Configure() 方法中加入我们想怎么验证由《前端》送过来的 Token 的设定,程序如下所示:

public void Configure(IApplicationBuilder app,
    IHostingEnvironment env,
    ILoggerFactory loggerFactory,
    DemaeDbInitializer seeder)
{
    // 省略
    app.UseJwtBearerAuthentication(new JwtBearerOptions()
    {
        AutomaticAuthenticate = true,
        AutomaticChallenge = true,
        TokenValidationParameters = new TokenValidationParameters()
        {
            ValidIssuer = Configuration["Tokens:Issuer"],
            Valid读者 = Configuration["Tokens:读者"],
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"])),
            ValidateLifetime = true
        }
    });
    // 省略
}

上述程序比较值的留意的是 TokenValidationParameters 所包含的参数,可借由检查几个回返回来的参数是否与当初发行时所给的参数值相符,且也检查当初签名的 Key 是否一致,以确认该 Token 的真伪,最后也检查是否过期。这些审核机制可自行组合,往后有机会再深入讨论。

成果测试

首先测试刻意不夹带 JSON Web Token 下达请求,果然如预期的回传 401 未授权的状态码:

接着在 Headers 夹带先前所产生的 JWT 即可正确查询,请留意在 JWT 字符串前要加上 bearer 空格后才贴上(读者要一字一字地敲,阿源哥哥也不反对啦)所产生的 JWT 字符串。

看来已经成功实践完成,所以今天就暂时学到这里,下星期一再来学习如何由 Xamarin.Forms 使用 JSON Web Token 登入存取受保护的数据。