宁波seo专员,新乡seo推广,seo网站优化推广费用,软件外包公司排名前十名在普通的MVC项目中 我们普遍的使用Cookie来作为认证授权方式#xff0c;使用简单。登录成功后将用户信息写入Cookie#xff1b;但当我们做WebApi的时候显然Cookie这种方式就有点不适用了。在dotnet core 中 WebApi中目前比较流行的认证授权方式是Jwt (Json Web Token) 技术。… 在普通的MVC项目中 我们普遍的使用Cookie来作为认证授权方式使用简单。登录成功后将用户信息写入Cookie但当我们做WebApi的时候显然Cookie这种方式就有点不适用了。在dotnet core 中 WebApi中目前比较流行的认证授权方式是Jwt (Json Web Token) 技术。Jwt 是一种无状态的分布式身份验证方式Jwt 是将用户登录信息加密后存放到返回的Token中 相当于用户信息是存储在客户端。Jwt的加密方式有两种 对称加密与非对称加密非对称加密即 RSA 加密的方式。自己手写认证授权代码和Jwt的思路是一样的不同之处在于1、加密方式仅仅是采用的对称加密方式 简单高效。哈哈(弊端就是没有非对称加密更安全)2、用户登录信息主要保存在Redis中即服务端。自己写的好处1、扩展性强可根据自己的需要进行各种扩展比如在验证授权时可很方便的添加多设备登录挤下线功能等。2、可随时调整用户的Token失效时间。认证及授权流程1、先请求登录接口登录成功为用户产生一个Token登录获取Token 图片中ticket字段。 2、 客户端拿到Token在其他请求中将Token信息添加到请求头中传递到服务端。开发思路1、添加一个过滤器。在Startup 中ConfigureServices方法里添加一个Filters 即我们自己授权代码类。添加过滤器之后我们的每次请求都会优先执行过滤器的代码。在这里我们就可以判断用户是否已经登录从而进行拦截没有授权的的请求。2、登录并获取Token由于添加了IAuthorizationFilter类型的过滤器所以每个请求都会被拦截。所以登录接口我们需要允许匿名访问。3、加解密Token加密登录成功后就要产生个Token了产生也简单。将用户的唯一信息比如uid或者guid进行对称式加密。当然如果需要对登录设备做区分或者多设备登录挤下线功能时最好也将登录设备一起加密进去。我们都知道 在加密中一般情况下只要加密的数据及加密key不变那么加密后的内容也会一直保持不变。如果我们每次登录产生的Token一直没有任何变化只要这个Token被泄露了那将很危险的。竟然我们希望每次登录产生的Token都有变化。那就要改变加密数据或者加密key了。加密数据是用户唯一信息这个显然不可能产生变化。所以我们能改变的地方只能是加密key了我们采用固定key随机key的方式。因为加密key在我们解密时也是需要一一对应的。所以我们得想办法将我们的随机key告诉我们解密的代码中。办法就是 我们将加密后的内容(一般情况进行base64编码)再加上随机key。(随机key一定是固定长度 不然后面无法解析拆分)比如加密内容是guid73e01eab-210d-4d19-a72a-d0d64e053ec0clientios 固定key123654随机keyFEZaaWbyimaWiJHah 即加密过程:加密(73e01eab-210d-4d19-a72a-d0d64e053ec0ios,123654FEZaaWbyimaWiJHah)M0EzM0ZGRjk2QzgwRDY2RDJDMTdFOEJGRUE0NDI3NEE1RDlFNkU4NDQ0MERFNEIyMkQ5QjM4MjAxODcwj加随机keyFEZaaWbyimaWiJHah所以我们返回给用户的Token实际上是包含了随机key的。当然这个随机key只有我们自己知道。因为随机key的长度以及位置只有我们自己知道。这种方式即使我们固定key被泄露了 只要别人不知道我们随机key处理方法也无济于事。解密知道加密过程后就好解密了。拿到用户提交的Token后首先按照随机key的固定位置进行截取。将加密内容和随机key拆开。然后将固定key和随机key组合一起解密加密的内容取得用户guid和登录的客户端类型。完整加解密代码代码中的ticket代表本文中的Token。代码中使用的是DES加解密完整demo代码请看githubhttps://github.com/cfan1236/NetCoreAuthorize原文地址:https://www.cnblogs.com/rui1236/p/10226063.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com