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

新桥企业网站建设有关网站建设的毕业设计

新桥企业网站建设,有关网站建设的毕业设计,dede手机网站模板,室内设计效果图马克笔最近#xff0c;团队的小伙伴们在做项目时#xff0c;需要用到JWT认证。遂根据自己的经验#xff0c;整理成了这篇文章#xff0c;用来帮助理清JWT认证的原理和代码编写操作。一、JWTJSON Web Token (JWT)是一个开放标准(RFC 7519)#xff0c;它定义了一种紧凑的、自包含的… 最近团队的小伙伴们在做项目时需要用到JWT认证。遂根据自己的经验整理成了这篇文章用来帮助理清JWT认证的原理和代码编写操作。一、JWTJSON Web Token (JWT)是一个开放标准(RFC 7519)它定义了一种紧凑的、自包含的方式用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任因为它是数字签名的。 JWT是什么看上面这段网上抄来的话。关于JWT以及优缺点网上有很多详细的说法我这儿就不重复了。我们只需要知道以下的事实在一般的系统中我们有时候会做个用户登录。用户登录完成进到系统后需要根据用户的权限来控制一些功能可用而另一些功能不可用。在SOA/AOP架构中做为最重要的API端其实也需要有类似登录或认证的内容用来区分哪些用户可以使用某个API哪些用户不行。同时我们希望这个登录或类似登录的过程只发生在一个固定位置。这样在我们写代码时建立好这样一个过程后在我们后边写代码时简单引用即可而不需要每个API程序都开发一次认证。这个需求其实就是OAuth的由来。最重要的是这样的代码写出来显得高大上。 下面进入正题。认证这个操作就像我们最近的日子。首先我们要有一个出入证或者绿码。这个证我们称作令牌Token。我们去领这个证这个操作称为发行Issue。我们拿着这个证去到一个地方。有专人会检查这个证这称为用户身份验证Authentication。验证通过放行称为授权Authorization验证不通过叫作未授权错误Unauthorized。如果这个证过期了你就需要去重新办一个证。这个过程叫做刷新RefreshToken。简言之这就是认证的全部流程。 下面我用一个Demo项目来逐步完成这个过程。二、开发环境基础项目这个Demo的开发环境是Mac VS Code Dotnet Core 3.1.2。$ dotnet --info .NET Core SDK (reflecting any global.json):Version:   3.1.201Commit:    b1768b4ae7Runtime Environment:OS Name:     Mac OS XOS Version:  10.15OS Platform: DarwinRID:         osx.10.15-x64Base Path:   /usr/local/share/dotnet/sdk/3.1.201/Host (useful for support):Version: 3.1.3Commit:  4a9f85e9f8.NET Core SDKs installed:3.1.201 [/usr/local/share/dotnet/sdk].NET Core runtimes installed:Microsoft.AspNetCore.App 3.1.3 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]Microsoft.NETCore.App 3.1.3 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]首先在这个环境下建立工程创建Solution% dotnet new sln -o demo The template Solution File was created successfully. 用Webapi模板创建项目% cd demo % dotnet new webapi -o demo The template ASP.NET Core Web API was created successfully.Processing post-creation actions... Running dotnet restore on demo/demo.csproj...Restore completed in 179.13 ms for demo/demo.csproj.Restore succeeded. 把Demo项目加到Solution中% dotnet sln add demo/demo.csproj Project demo/demo.csproj added to the solution. 安装Swagger这步非必须我习惯用Swagger不习惯用Postman% dotnet add package Swashbuckle.AspNetCore log  : Restore completed in 2.75 sec for demo/demo.csproj. 安装JWT认证支持库必须引入% dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer log  : Restore completed in 3.09 sec for demo/demo.csproj.五步做完基础项目就建完了。看一下整个的目录结构% tree . . ├── demo │   ├── Controllers │   │   └── WeatherForecastController.cs │   ├── Program.cs │   ├── Properties │   │   └── launchSettings.json │   ├── Startup.cs │   ├── WeatherForecast.cs │   ├── appsettings.Development.json │   ├── appsettings.json │   ├── demo.csproj │   └── obj │       ├── demo.csproj.nuget.dgspec.json │       ├── demo.csproj.nuget.g.props │       ├── demo.csproj.nuget.g.targets │       ├── project.assets.json │       └── project.nuget.cache └── demo.sln在Startup.cs中补充代码以启用Swagger在ConfigureServices方法中加入以下代码services.AddSwaggerGen(c  {c.SwaggerDoc(v1, new OpenApiInfo { Title  Demo, Version  V1 });c.AddSecurityDefinition(Bearer, new OpenApiSecurityScheme{Name  Authorization,Type  SecuritySchemeType.ApiKey,Scheme  Bearer,BearerFormat  JWT,In  ParameterLocation.Header,Description  ,});c.AddSecurityRequirement(new OpenApiSecurityRequirement{{new OpenApiSecurityScheme{Reference  new OpenApiReference{Type  ReferenceType.SecurityScheme,Id  Bearer}},new string[] {}}}); }); 在Configure方法中加入以下代码app.UseSwagger(); app.UseSwaggerUI(c  {c.SwaggerEndpoint(/swagger/v1/swagger.json, Demo V1); }); 关于Swagger的详细配置这里不做说明留着以后写。三、签发Token签发Token是认证的第一步。用户进到系统在验证用户帐号密码后需要根据用户的数据把Token返回给用户。这个过程其实跟认证没什么关系只是一个普通的API功能。工程下加一个目录DTOModels创建一个LoginRequestDTO的类用于定义API的输入参数。using System;namespace demo.DTOModels {public class LoginRequestDTO{public string username { get; set; }public string password { get; set; }} } 创建一个控制器AuthenticationController并在控制器里创建一个API方法RequestToken。using Microsoft.AspNetCore.Mvc; using demo.DTOModels;namespace demo.Controllers {public class AuthenticationController : ControllerBase{[HttpPost, Route(requesttoken)]public ActionResult RequestToken([FromBody] LoginRequestDTO request){//这儿待完善return Ok();}} } 生成JWT Token需要预设一些参数。我们在appsetting.json里先设置好。{Logging: {LogLevel: {Default: Information,Microsoft: Warning,Microsoft.Hosting.Lifetime: Information}},AllowedHosts: *,tokenParameter: {secret: 123456123456123456,issuer: WangPlus,accessExpiration: 120,refreshExpiration: 1440} } 这里tokenParameter节是我们设置的参数。一般来说是这几个secret: JWT加密的密钥。现在主流用SHA256加密需要256位以上的密钥unicode是16个字符以上尽量复杂一些。密钥泄露Token就会被破解所以你懂的。issuer: 签发人的名称如果没人注意你可以把大名写在上面。accessExpiration: Token的有效分钟数。过了这个时间这个Token会过期。refreshExpiration: refreshToken的有效分钟数。过了这个时间用户需要重新登录。 Token过期后可以让用户重新登录认证拿Token。但这个方式会比较Low。高大上的方式是签发Token的时候同时也签发一个refreshToken给用户。用户Token过期后可以拿refreshToken去申请新的Token同时刷新refreshToken。如果用户长时间未使用系统refreshToken也过期了才让用户重新登录认证。refreshToken可以用JWT生成也可以自己生成不影响认证。建一个Models目录创建一个映射tokenParameter的类。这个类不是必须只是为了写着方便。不想这样写也可以直接读配置再转成数据。using System;namespace demo.Models {public class tokenParameter{public string Secret { get; set; }public string Issuer { get; set; }public int AccessExpiration { get; set; }public int RefreshExpiration { get; set; }} } 在前边建好的API - RequestToken中完成Token和refreshToken的生成和返回。using Microsoft.AspNetCore.Mvc; using demo.DTOModels; using Microsoft.Extensions.Configuration; using System; using System.Text; using demo.Models; using Microsoft.IdentityModel.Tokens; using System.Security.Claims; using System.IdentityModel.Tokens.Jwt;namespace demo.Controllers {public class AuthenticationController : ControllerBase{private tokenParameter _tokenParameter  new tokenParameter();public AuthenticationController(){var config  new ConfigurationBuilder().SetBasePath(AppContext.BaseDirectory).AddJsonFile(appsettings.json).Build();_tokenParameter  config.GetSection(tokenParameter).GettokenParameter();}[HttpPost, Route(requestToken)]public ActionResult RequestToken([FromBody] LoginRequestDTO request){//这儿在做用户的帐号密码校验。我这儿略过了。if (request.username  null  request.password  null)return BadRequest(Invalid Request);//生成Token和RefreshTokenvar token  GenUserToken(request.username, testUser);var refreshToken  123456;return Ok(new[] { token, refreshToken });}//这儿是真正的生成Token代码private string GenUserToken(string username, string role){var claims  new[]{new Claim(ClaimTypes.Name, username),new Claim(ClaimTypes.Role, role),};var key  new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_tokenParameter.Secret));var credentials  new SigningCredentials(key, SecurityAlgorithms.HmacSha256);var jwtToken  new JwtSecurityToken(_tokenParameter.Issuer, null, claims, expires: DateTime.UtcNow.AddMinutes(_tokenParameter.AccessExpiration), signingCredentials: credentials);var token  new JwtSecurityTokenHandler().WriteToken(jwtToken);return token;}} } 这个类里验证帐号密码的代码我略过了。还有refreshToken给了一个固定串。真实项目这儿就按需要做就好。未完待续动动手指点个在看您的赞赏是我最大的鼓励I will be more solid with your donations
http://www.pierceye.com/news/517469/

相关文章:

  • 网站怎么黑北京广告设计公司排行
  • 番禺网站排名推广优化排名网站开发类标书模板
  • 青海市住房和城乡建设厅网站关于网站建设的合同协议书
  • 中文企业网站模板下载wordpress付费知识
  • 网站设计图能用ps做么襄城县住房和城市建设局网站
  • 汕头市网站建设分站服务机构建设网站费用会计分录
  • 360网站推广wordpress 插件 定时
  • 企业设计网站公司易语言可以做网站嘛
  • 乐昌网站建设wordpress 自动推送
  • 建立自我追求无我什么意思广州网站优化推广
  • 公司介绍网站怎么做的苏州网页制作招聘
  • 天长网站建设黄骅市长
  • 深圳网站维护页面设计WordPress在线留言插件
  • 网站改版的几个建议夜夜夜在线观看
  • 网站开发和 app开发的区别百度推广管家
  • 门窗网站制作宣传语建设一个商城式网站可以吗
  • 网站优化推广公司北京软件开发公司滕迎江
  • 网站建立的连接不安全怎么解决网站如何做数据库
  • 营销型制作网站公司重庆蒲公英网站建设公司
  • 官方网站找工作公众号中国航发网上采购平台
  • 大连网站制作仟亿科技个人网站建站步骤
  • 网站php文件上传成都网站搜索排名优化哪家好
  • 南京做网站费用做网站的服务器配置
  • 外贸用什么平台自建站较好门户网站盈利
  • 外包兼职做图的网站做视频网站用哪个模板
  • 全球购物网站大全百度网盟推广官方网站
  • 计算机网站维护建设深圳外网站建设
  • 贵州公明建设投资咨询有限公司官方网站小说网站开发对影成三人小说
  • 软件分享网站不一样的婚恋网站怎么做
  • 如何维护给做网站的客户公司变更名称和经营范围