当前位置: 首页 > news >正文

哪个浏览器不屏蔽网站wordpress手机怎么用

哪个浏览器不屏蔽网站,wordpress手机怎么用,绍兴网站seo,wordpress表单数据提交前情提要#xff1a;ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统文章超长预警#xff08;1万字以上#xff09;#xff0c;不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包自上一篇介绍如何在 ASP.NET Core 中集成 JWT 的博文发布… 前情提要ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统文章超长预警1万字以上不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包自上一篇介绍如何在 ASP.NET Core 中集成 JWT 的博文发布接近一年后我又想来分享一些使用 JWT 的经验了。过去的一年中我每次遇到一些小的垃圾的项目就会按照去年的那片文章来进行配置虽然代码不多但是每次写这么一些模板代码又感觉很枯燥、冗余而且稍不注意就有可能配置的有问题导致验证不成功。前几天我继续写自己的垃圾毕设写到集成 JWT 的时候我终于忍受不了这种重复的配置工作了于是便着手封装一个简单易用的 JWT 插件。之前集成 JWT 的方法在 ConfigureServices 方法里面添加了太多细节上的东西所以在新的实现里面添加服务依赖的 API 一定要足够简单其次之前的实现里面签发一个 Token 步骤太多且比较复杂所以签发 Token 的步骤也要简化。最后之前在 Cookie 中添加 JWT 支持也比较 hack跟 ASP.NET Core 的集成也不是很好。带着这些痛点我在网上经历了一番搜索最终找到了这个仓库 本来都想直接用他的实现了不过他的配置看起来还是有些麻烦的所以没办法只好自己手写一个了。从设计配置 API 开始其实不管是我之前写的实现还是 GitHub 上找到的那个仓库的实现最让我不满意的地方就是配置很多时候我就只想快速地搭建一个项目根本不想去研究“怎样配置”所以我的第一步的目标就是设计一个简单的配置接口EasyJwtOption 是用来进行描述 EasyJwt 配置的类型它的每个属性都是我们可以进行配置的地方同时为了避免把 ASP.NET Core 自带的对 JWT 跟 Cookie 的配置项目重写一遍我就定义了 CookieOptions跟 JwtOptions 这两个属性用来向微软的 AuthenticationBuilder 传递配置。GenerateKey() GenerateCredentials() 这两个抽象方法则跟加密算法相关在 JWT 中我们可以使用两类算法进行加密对称加密与非对称加密在我之前写的文章中我使用的是非对称加密的 RSA 算法将原先的配置写成新的 EasyJwtOption 就是由于 RSA 算法的私钥与密钥只能机器生成所以我还是延续了以前的做法把算法参数导出成 json 保存在本地故 EasyRSAOptions 的构造函数接受一个存储位置作为必须参数。但是这种做法普适性不太好更好的做法是把 RSA 私钥与公钥导出成标准格式的文本这样其他的应用也可以导入不过我比较懒先这么凑活吧。在 GitHub 找到的那个项目中作者使用的是对称加密算法把这个算法改成我的 EasyJwtOption 就是在非对称加密算法中我们需要提供一个密钥供加密、解密使用所以 EasySymmetricOptions 的构造函数接受一个任意的字符串作为参数又因为 SymmetricSecurityKey 对安全性的要求密钥的长度太短会报出异常用户的输入的密钥字符串进行了一些转换来满足密钥长度条件。方便的签发 Token为了能够让网站的各个组件能够方便的随时签发 Token 我设计了下面这个类它的构造函数接受一个 EasyJwtOption 作为参数只要我们在 Starpup.ConfigureServices 方法中把这个类添加进 IoC 容器任何依赖 EasyJwt 的对象都可以非常简便的为用户生成 Token调用方法大致如下claims 是 Identity 中的概念表示用户的信息例如用户名、邮箱。签发 token 需要指定用户名、用户相关的信息以及 token 过期时间。我们 EasyJwt 得到了签发 token 所需要的参数后会创建一个 ClaimsIdentity 对象这同样也是 Identity 中的概念用来表示用户的一些身份信息的集合我们可以把一个 Identity 对象想象成一张通行证上面记录着用户的身份信息。一个用户可以有多张通行证这些通行证既可以由我们自己的应用生成也可以由第三方授权的应用生成不过具体的细节就涉及到了 Identity 的身份认证设计在此就不拓展来讲了。为应用添加 JWT 认证支持上面说了这么多还只是停留在签发 Token 的阶段进行身份认证从这里才真正开始。微软早就已经提供了一个添加 JWT 认证支持的拓展不过那个还不算特别的简单易用所以我就在微软的 API 之上设计了一个新的拓展方法来结合之前的 EasyJwt 配置 JWT 认证这个拓展方法接受一个 EasyJwtOption 的子类实例作为参数并通过这个参数初始化一个 EasyJwt 对象并将其添加进 IoC 容器中。接着就是简单的调用微软的拓展方法为应用程序添加 JwtBearer 认证。这里的 jwtParams 是由 EasyJwt 对象导出的具体的导出代码实现可以在我的 GitHub 上看到并不是很重要的代码所以就不在这里贴出来了。为 Cookie 添加 JWT 支持为 Cookie 添加 Jwt 支持是最让人头疼的了而且还要让我们的 API 跟 ASP.NET Core 自己的机制能够较完美的结合起来这里就需要比较多的代码了。首先我们需要自定义一个 Cookie 中存储 Jwt Token 的格式也就是下面这个 EasyJwtAuthTicketFormat这个类我借鉴了前面提到的 Github 上面的那个项目的实现并花了一些功夫对它做了一些改动。你可以看到这个真的是非常大的一坨代码不过我们还是先克服困难从构造函数来阅读吧。EasyJwtAuthTicketFormat 的构造函数接受三个参数第一个我们已经见过了是 EasyJwt 导出的 TokenValidationParameters用来对 Jwt token 进行验证、解密。另外两个参数与 ASP.NET Core 的安全机制有关IDataSerializerAuthenticationTicket ticketSerializer 用来将要存入 Cookie 中的数据序列化或者从 Cookie 中反序列化我们需要读出来的数据。IDataProtector dataProtector 则是用来对 Cookie 进行加密、解密的工具。据 Github 上那个项目的作者说他的代码是从微软的默认实现里面魔改出来的所以我个人认为其中有些东西对于 Jwt 来说其实不是必须的理由我会在下面详细解释。首先一起来看看 Unprotect 方法他的 protectedText 参数就是存储在 Cookie 中的字符串首先我们需要对他用 Base64 进行解码然后接着要用之前的 dataProtector 进行解密最后再用 ticketSerializer 反序列化出 AuthenticationTicket 对象这个 AuthenticationTicket 中存储的就是一些跟身份认证相关的数据在我们这里主要就是存储着 jwt Token。当我们把 token 中的用户数据解密并提取出来之后再跟 Cookie 中可能含有的其他的身份信息合并起来虽然可能并不会有什么其他信息。。。最终就把结果返回出去。Protect 方法就很简单了基本上就是 Unprotect 开头一部分的逆序先把 AuthenticationTicket序列化然后使用 dataProtector 加密最终 Base64 编码成字符串返回出去。那么很有意思的事情就出现了jwt 本身的设计就是可以直接在 HTTP 协议中直接传递的一般来说并不需要我们重新对其进行 Base64 编码而且 JWT 本身的内容就是有加密校验的也就是说信息可读但是不可被修改那么使用 dataProtector 对其加密的过程也应该是可以省略的。不过由于我比较懒而且对这里不太肯定所以就没有移除这部分的代码。向响应头 Cookie 中添加 JWT你可能觉得这有啥意思不就是直接 Cookies.Add() 就好了然而这样做是没法让认证中间件正确的提取出 Token 的我们需要用到 HttpContext.SignInAsync 这个方法。这个方法的一个重载是接受一个 ClaimsPrincipal 跟一个 AuthentifactionProperties 作为参数而这两个东西就是上一节提到的 AuthenticationTicket 的重要组成。所以我们除了要让 EasyJwt 签发 token 之外还要它能够生成 AuthTicket方便我们跟自带的认证中间件结合使用相关的实现代码如下这个方法跟签发 Token 的方法长得一个样接受一个 Claims 集合然后用这些 claims 构建出一张通行证ClaimsIdentity然后把这个 identity 对象扔进一个 ClaimsPrincipal 里面。同时我们还需要把 token 塞进一个 AuthentifactionProperties 对象里面。最后把这两个创建出来的东西返回出去。为了能够简化这部分的调用我又写了一个拓展方法把 SignInAsync 重新包装了一下这样在用户登录的时候就可以非常的简单的同时把 token 显式的返回并设置在 Cookie 中了看起来我们终于能够正确的签发 token 了然而事情并没有结束我们还没有把 Cookie 认证及其相关依赖添加到 IoC 容器中让我们直接修改一下前面的操作注册服务的拓展方法好了至此我们终于能够完整的让 Jwt 的功能运行起来了。成果展示那么如何在一个空白的项目中使用 EasyJwt 认证呢1. 注册服务2. 添加认证中间件// Startup.Configureapp.UseAuthentication();3. 编写自己的登录注册控制器4. 使用 EasyJwtAuthorize 认证过滤器保护你的 API 或者 MVC 控制器终于经过我们一系列的魔改我们可以非常快速的来构建一个使用 Jwt 来进行身份认证的网站了。本文的全部代码您都可以在我的这个项目中找到或者如果您想在您的项目中试试我写的这个小拓展可以直接使用 dotnet cli 来安装dotnet add package ZeekoUtilsPack.AspNetCore --source https://www.myget.org/F/zeekoget/api/v3/index.json 可以改进的地方加入吊销 token 的功能移除 EasyJwtAuthTicketFormat 中冗余的代码原文地址https://www.cnblogs.com/JacZhu/p/9388964.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.yutouwan.com/news/450666/

相关文章:

  • 海珠建网站的公司长春火车站现在正常通车吗
  • 会展门户网站源码建设商城购物网站
  • 最新设计网站大全旅游的网页设计模板
  • 下载网站专用空间重庆新闻第一眼
  • 做网站的方法及措施简单描述什么是网络营销
  • 网站未在腾讯云备案如何用爬虫做网站监控
  • 青岛 制作网站 大点的公司wordpress文章获取接口
  • 网站设计素养杭州公司网站域名续费
  • 手机网站怎么做才适合优化建立一个自己的网页
  • 做网站为什么要做备案接入做一个网站需要多少钱大概
  • 如何建设网站使用seo
  • 做网站多少钱鞍山市残疾人网站开发
  • 贵州建设厅网站政务大厅线上营销方式
  • 灯塔建设网站天津做系统集成的公司网站
  • 如何做机票预订网站京东云服务器怎么做网站
  • 网站建设外出考察信息手机网站管理系统
  • 网站模板及源码坂田公司做网站
  • 陕西西安网站建设公司排名网站内部搜索怎么做
  • 新乡公司做网站找哪家公司好查网站排名
  • 做网站的销售怎么样网站核检单
  • 可信赖的丹阳网站建设在线商标免费设计
  • 网站被降权会发生什么影响吗免费的行情网站
  • 电商网站构建html个人主页源代码
  • 怎么自己创立网站行政部建设公司网站
  • 做黎川旅游网站的目的山东建筑公司实力排名
  • 秦皇岛网络公司 网站托管平面设计软件名称
  • 上传空间网站智慧团建电脑版注册登录入口
  • 中天钢铁 网站建设如何做seo
  • 网站建设需要什么设备中国机械加工网订单
  • 建社个人网站清远市住房与城乡建设局的网站查