用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它 (2)

JWT由三部分组成: header, payload, signature. 形式如下面的伪代码: [X=base64(header)].[Y=base64(payload)].[signature([X].[Y])] .

去这个网址可以更直观的理解这三部分: jwt.io

JWT token最终是一个字符串, 它的三个部分用点(.)分开, 前两部分(header payload)是Base64编码的字符串; 最后一部分是前两个Base64字符串的组合, 也是用点(.)分开并进行了签名, 如下图:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

 

 使用Bearer方案和JWT的流程如下:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

 

配置项目, 在Startup的ConfigureServices里:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

如果使用Identity Server 4的话, 这里就可以不这样写了.

首先我们配置使用Bearer认证方案, 然后通过AddJwtBearer设定一些参数. Configuration里面的值可以放在appSettings.json里面或者其它地方:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

然后在Configure方法里调用app.UseAuthentication()方法, 要在app.UseMvc()之前调用:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

最后使用[Authorize]属性标签把CountryController保护起来, 也可以应用于Action级:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

发送不带Authorization Header的请求来测试:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

返回 401 Unauthorized 未授权.

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

返回的Header里面告诉我们应该使用Bearer认证方案.

 

下面我们需要一个可以生成JWT token的节点, 针对本文我就在本项目里建立这个节点吧:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

请求token的地址是 /api/authentication, 请求token用的是Basic方案, Post方法里就是先解码, 验证用户名和密码, 成功后调用GenerateToken生成token.

那就按要求再次发送请求:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

注意这里usename:password的base64编码是: dXNlcm5hbWU6cGFzc3dvcmQ=

现在我获得了token, 然后我用token再次请求Country资源:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

资源就可以正常的访问了.

 

想要解析这个token, 需要到jwt.io:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

箭头处需要填上secret.

 

这个例子比较简单, 实际应用中还是使用Identity Server 4之类的东西吧.

 

使用HTTPS

根据官方文档(), 它建议ASP.NET Core web应用都应该调用HTTPS重定向中间件, 这样就可以把所有的HTTP请求转换为HTTPS.

只需要在Startup的Configure方法里调用UseHttpsRedirection()方法即可:

用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

而在ConfigureServices方法里可以配置这个中间件:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjypp.html