zoukankan      html  css  js  c++  java
  • .net core Jwt 添加

        Jwt 已经成为跨平台身份验证通用方案,如不了解请关注:https://jwt.io/。   

        为了和微软其他验证模块有个比较好的衔接,项目中采用了微软开发的jwt组件: System.IdentityModel.Tokens.Jwt。首先安装:Install-Package System.IdentityModel.Tokens.Jwt

       在config方法中添加

        

    1  if (!HostingEnvironment.IsEnvironment("test"))
    2             {
    3                 app.UseJwtBearerAuthentication(Jwt.GetJwtOptions());
    4             }

     实现一个jwt工具类:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.IdentityModel.Tokens.Jwt;
     4 using System.Security.Claims;
     5 using System.Text;
     6 using System.Threading.Tasks;
     7 using AutoMapper;
     8 using Microsoft.AspNet.Hosting;
     9 using Microsoft.AspNetCore.Authentication.JwtBearer;
    10 using Microsoft.AspNetCore.Builder;
    11 using Microsoft.AspNetCore.Hosting;
    12 using Microsoft.AspNetCore.Http;
    13 using Microsoft.AspNetCore.Http.Extensions;
    14 using Microsoft.Extensions.Configuration;
    15 using Microsoft.IdentityModel.Tokens;
    16 using NDaisy.Core.ServiceLocator;
    17 using WebApiCore.Core.Utility.Extension;
    18 using IHostingEnvironment = Microsoft.AspNetCore.Hosting.IHostingEnvironment;
    19 
    20 namespace WebApiCore.Utility
    21 {
    22     public class Jwt
    23     {
    24         private static SecurityKey _signKey;
    25         private static IConfigurationSection _config;
    26         private const string Issue = "webcore";
    27         static Jwt()
    28         {
    29             _config= ServiceLocator.Current.GetInstance<IConfigurationRoot>().GetSection("Jwt");
    30             var keyAsBytes = Encoding.ASCII.GetBytes(_config.GetValue<string>("Salt"));
    31             _signKey = new SymmetricSecurityKey(keyAsBytes);
    32               
    33         }
    34 
    35         public static JwtBearerOptions GetJwtOptions()
    36         {
    37             return new JwtBearerOptions
    38             {
    39                 TokenValidationParameters =
    40                 {
    41                     ValidIssuer = Issue,
    42                     IssuerSigningKey = _signKey,
    43                     ValidateLifetime = true,
    44                     ValidateIssuer = true,
    45                     ValidateAudience = false
    46                 },
    47                   Events = new JwtBearerEvents()
    48                   {
    49                       OnAuthenticationFailed = c =>
    50                       {
    51                           
    52                           return Task.Run(() =>
    53                           {
    54                               if (ServiceLocator.Current.GetInstance<IHostingEnvironment>().IsDevelopment())
    55                               {
    56                                   c.Request.GetDisplayUrl().LogInfo();
    57                                   c.Exception.LogError();
    58                               }
    59 
    60                           } );
    61                       }
    62                    
    63                   }
    64             };
    65         }
    66 
    67         public static string SignToken(IList<Claim> claims)
    68         {
    69             var seconds= _config.GetValue<int>("SlideTime");
    70              
    71             JwtSecurityToken jwtSecurityToken = new JwtSecurityToken(issuer: Issue, claims: claims, expires: DateTime.UtcNow.AddSeconds(seconds), signingCredentials: new SigningCredentials(_signKey, SecurityAlgorithms.HmacSha256));
    72              
    73             return new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
    74         }
    75     }
    76 
    77 }
    View Code

    添加一个获取token的入口,实际项目中,放在登录授权里面:

    1  app.Map("/auth/test", appbuilder =>
    2             {
    3                 appbuilder.Run(d =>
    4                 {
    5                     var token= Jwt.SignToken(new List<Claim>() {new Claim("name", "ryan")});
    6                    
    7                     return d.Response.WriteAsync(token);
    8                 });
    9             });
  • 相关阅读:
    hive 调优
    nohup
    安装ElasticSearch 6.1.1 head插件
    101. Symmetric Tree
    67. Add Binary
    70. Climbing Stairs
    896. Monotonic Array
    66. Plus One
    27. Remove Element
    Apache Tomcat文件包含漏洞风险大,威胁全球约8万台服务器
  • 原文地址:https://www.cnblogs.com/ryansecreat/p/6094254.html
Copyright © 2011-2022 走看看