ASP.NET Core 基于JWT的认证(二)

上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt.Net Core 上的实际运用。

环境

  • .Net Core 2.2
  • Visual Studio 2017
  • ASP.NET Core WebAPI2

在上一篇文章中,我们详细的介绍了JWT的知识,这一次,我们将进行一次实战的训练,这一块将会有三个部分组成。分别是:

1.如何使用微软官方提供的库实现jwt

2.如何自定义一个Jwt认证类

3.使用非关系型数据库Redisjwt信息的更新和替换

当然,我在后期的文章中也会讲解如何使用IdentityServer4去进行我们的权限控制。

在本文中,你将会学到如何使用微软官方提供的库进行Jwt的签发、验证以及权限控制。我们使用的WebApi作为演示程序。

配置信息的存储

通常来说,我们会把数据库等等一系列的配置放在我们的appsettings.json中,我们也尝试着将我们的jwt私钥等存在其中。

  "JwtSettings": {
"Issuer": "admin",
"Audience": "user",
"SecretKey": "ahfuawivb754huab21n5n1"
}

当然你也可以把更多的配置放进去。

然后我们用依赖注入的方法,将配置文件注入到我们的类对象中。我们创建一个JwtSetting类,并且在服务中进行注入。

类对象

    public class JwtSettings
{
/// <summary>
/// 证书颁发者
/// </summary>
public string Issuer { get; set; } /// <summary>
/// 允许使用的角色
/// </summary>
public string Audience { get; set; } /// <summary>
/// 加密字符串
/// </summary>
public string SecretKey { get; set; }
}

注入

services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));
JwtSettings setting = new JwtSettings();
Configuration.Bind("JwtSettings", setting);
JwtHelper.Settings = setting;

想必这里的代码大家肯定是看的轻车熟路了,非常的简单。

接下来我们对Jwt的签发制作一个JwtHelper类。

Jwt的签发

这一块,你可以上网去查看权限模型的一些介绍。

这里我简要的做一个介绍:

Claim是什么呢,他就是一个用于描述一个具体的实体对象的一些描述性的字段。

ClaimsIdentity就是用于指明Claim中所存储的内容的合集,比如我们的身份证,年龄、性别、身份证号码等就组成了我们的身份证。

ClaimsPrincipal我们称为“证件当事人”,也就是我们之前声明的东西的一个合计,类似,比如说你可能有驾照、身份证、医保卡等等,而所持有这些的人就叫做ClaimsPrincipal

一些代码是一个普通的结构,大家可以按照这种模板进行修改模型,从而创建自己的jwt结构

代码:

    public class JwtHelper
{
private static JwtSettings settings;
public static JwtSettings Settings { set { settings = value; } }
public static string create_Token(TokenPayload user)
{
//这里就是声明我们的claim
var claims = new Claim[] {
new Claim(ClaimTypes.Name, user.Name),
new Claim(ClaimTypes.Role, user.Role),
new Claim(ClaimTypes.Sid,user.Sid.ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(settings.SecretKey));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken(
issuer: settings.Issuer,
audience: settings.Audience,
claims: claims,
expires: DateTime.Now.AddDays(1),
signingCredentials: creds);
var Token = new JwtSecurityTokenHandler().WriteToken(token);
return Token;
}
}

JWT认证

在这里,你可以使用我们下一节所遇到的自定义认证,不过我们还是先学着使用我们最为普通的官方方法。具体的操作非常简单,只需要在我们的容器service中注入一下就可以了。

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(config =>
{
config.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,//是否验证Issuer
ValidateAudience = true,//是否验证Audience
ValidateLifetime = true,//是否验证失效时间
ValidateIssuerSigningKey = true,//是否验证SecurityKey
ValidAudience = setting.Audience,//Audience
ValidIssuer = setting.Issuer,//Issuer,这两项和前面签发jwt的设置一致
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(setting.SecretKey))//拿到SecurityKey
};
});

这样,就完成了我们的jwt认证过程。

如果我们需要从token中取出我们的信息也非常的简单,利用依赖注入,使用

自己创建号这两个接口和类,对httpcontext进行截断,从httpcontext.user中就可以直接取出我们需要的payload。当然也可以使用中间件的方式,这里我们就不再用篇幅进行叙述了。

如果我的文章帮到了你,请帮忙点个赞,点个关注。谢谢!

我的掘金:WarrenRyan

我的简书:WarrenRyan

欢迎关注我的博客获得第一时间更新 https://blog.tity.online

我的Github:StevenEco

我的博客园:WarrenRyan

ASP.NET Core 基于JWT的认证(二)的更多相关文章

  1. ASP.NET Core 基于JWT的认证(一)

    ASP.NET Core 基于JWT的认证(一) Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计 ...

  2. Asp.Net Core基于JWT认证的数据接口网关Demo

    近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求用Aps.Net Core做数据网关服务且基于JWT认证实现对 ...

  3. ASP.NET Core 中jwt授权认证的流程原理

    目录 1,快速实现授权验证 1.1 添加 JWT 服务配置 1.2 颁发 Token 1.3 添加 API访问 2,探究授权认证中间件 2.1 实现 Token 解析 2.2 实现校验认证 1,快速实 ...

  4. 【转】ASP.NET Core WebAPI JWT Bearer 认证失败返回自定义数据 Json

    应用场景:当前我们给微信小程序提供服务接口,接口中使用了权限认证这一块,当我使用 JWT Bearer 进行接口权限认证的时候,返回的结果不是我们客户端想要的,其它我们想要给客户端返回统一的数据结构, ...

  5. asp.net core 基于角色的认证登陆

    一.登陆页面的Controller [Authorize(Roles = "Admin,SuperAdmin")] public class ManageController : ...

  6. asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限

    [前言] 上一篇我们介绍了什么是JWT,以及如何在asp.net core api项目中集成JWT权限认证.传送门:https://www.cnblogs.com/7tiny/p/11012035.h ...

  7. 理解ASP.NET Core - 基于JwtBearer的身份认证(Authentication)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 在开始之前,如果你还不了解基于Cookie的身份认证,那么建议你先阅读<基于Cookie ...

  8. ASP.NET WebApi 基于JWT实现Token签名认证

    一.前言 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebServi ...

  9. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

随机推荐

  1. Ceph万兆内网与系统万兆迁移

    本文将总结一次为Ceph集群加装万兆内网(cluster network),后因需要对比实验来研究分布式存储集群在计算,网络,存储过程中各部分耗时比例,而将Ceph整体系统又整体搬移至万兆网的过程.但 ...

  2. python接口自动化(二十)--token登录(详解)

    简介 为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮.有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录.token 传参有两种一种是放在请 ...

  3. XiaomiPushDemo【小米推送集成,基于V3.6.12版本】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个Demo只是记录小米推送的集成,不能运行. 使用步骤 一.项目组织结构图 注意事项: 1.  导入类文件后需要change包名以 ...

  4. SpringBoot进阶教程(二十七)整合Redis之分布式锁

    在之前的一篇文章(<Java分布式锁,搞懂分布式锁实现看这篇文章就对了>),已经介绍过几种java分布式锁,今天来个Redis分布式锁的demo.redis 现在已经成为系统缓存的必备组件 ...

  5. 面试挂在了 LRU 缓存算法设计上

    好吧,有人可能觉得我标题党了,但我想告诉你们的是,前阵子面试确实挂在了 RLU 缓存算法的设计上了.当时做题的时候,自己想的太多了,感觉设计一个 LRU(Least recently used) 缓存 ...

  6. Python进阶:如何将字符串常量转化为变量?

    前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它很有价值,应该继续思考怎么解决,所以就在私密的知识星球上记录了下来. 万万 ...

  7. 通过模拟JDK中的动态代理,由浅入深讲解动态代理思想.

    目录 场景引入 动态代理引入 动态代理进阶 总结 个人认为动态代理在设计模式中算是比较难的, 本篇文章将从无到有, 从一个简单代码示例开始迭代, 逐步深入讲解动态代理思想. 场景引入 假设现在有一个坦 ...

  8. Dapper 链式查询 扩展

    Dapper 链式查询扩展 DapperSqlMaker   Github地址:https://github.com/mumumutou/DapperSqlMaker  欢迎大佬加入 Demo: 查询 ...

  9. 用css画一个哆啦A梦

    原图: 效果图: 虽然说没用啥什么高级的技巧,但这让我感受到了CSS的乐趣! 好好学习,天天向上! <!DOCTYPE html> <html> <head> &l ...

  10. 涨姿势:抛弃字母、数字和下划线写SHELL

    PHP中异或 (^) 的概念 <?php echo"A"^"?";?> <?php echo"A"^"?&quo ...