.Net Core Jwt鉴权授权

打印 上一主题 下一主题

主题 523|帖子 523|积分 1573


目录

简介



  • Jwt分为三段 通过远点分割

  • header => 描述这个token加密方式
  • PlayLoad => 有效载荷,用户信息+自定义Claims信息Verify
  • Signature => 签名, (头部信息base64处理,有效载荷base64处理) + 密钥


  • 示例 :
  1. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiYWRtaW4iLCJFeHRlbmRlZDEiOiLml6Dkv6Hmga8iLCJFeHRlbmRlZDIiOiIiLCJFeHRlbmRlZDMiOiIiLCJFeHRlbmRlZDQiOiIiLCJFeHRlbmRlZDUiOiIiLCIxIjoi57O757uf566h55CG5ZGYIiwiMiI6IueUqOaIt-euoeeQhuWRmCIsImV4cCI6MTY4ODkwMTA2NiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDg4IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo1MDg4In0.7J1J7yWj4ELHJZIwLKnT4RgcMu3rGAX5ACBFfCS0LWM
复制代码
基于.Net Core 验证方式


  • 生成jwtToken
  • 标记[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
  • 验证 Issuer
  • 验证 Audience
  • 验证 SecurityKey
  • 验证自定义验证
  • 验证完成可以正常访问接口
验证的那几步顺序可以直接在自定义验证中验证

Jwt获取Token

引入三方包
  1. <ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>
复制代码
生成Token
  1. using Microsoft.IdentityModel.Tokens;using Programming.DotNetCore.Function.Entity.Jwt;using Programming.DotNetCore.Function.Interface.PasswordService;using Programming.DotNetCore.Function.Password.Entity;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;namespace Programming.DotNetCore.Function.Password{    public class JwtServices : IPassWordService    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>public string GetToken(UserInfo user,JwtConfig jwtConfig)<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>{<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>    List claims = new List<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup>    {<ItemGroup>
  14.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  15.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  16. </ItemGroup><ItemGroup>
  17.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  18.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  19. </ItemGroup>new Claim(ClaimTypes.Name, user.UserName ?? ""),<ItemGroup>
  20.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  21.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  22. </ItemGroup><ItemGroup>
  23.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  24.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  25. </ItemGroup>new Claim("Extended1", user.Extended1 ?? ""),<ItemGroup>
  26.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  27.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  28. </ItemGroup><ItemGroup>
  29.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  30.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  31. </ItemGroup>new Claim("Extended2", user.Extended2 ?? ""),<ItemGroup>
  32.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  33.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  34. </ItemGroup><ItemGroup>
  35.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  36.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  37. </ItemGroup>new Claim("Extended3", user.Extended3 ?? ""),<ItemGroup>
  38.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  39.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  40. </ItemGroup><ItemGroup>
  41.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  42.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  43. </ItemGroup>new Claim("Extended4", user.Extended4 ?? ""),<ItemGroup>
  44.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  45.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  46. </ItemGroup><ItemGroup>
  47.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  48.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  49. </ItemGroup>new Claim("Extended5", user.Extended5 ?? ""),<ItemGroup>
  50.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  51.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  52. </ItemGroup>    };<ItemGroup>
  53.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  54.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  55. </ItemGroup>    if (user.Role is not null)<ItemGroup>
  56.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  57.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  58. </ItemGroup>    {<ItemGroup>
  59.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  60.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  61. </ItemGroup><ItemGroup>
  62.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  63.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  64. </ItemGroup>foreach (var item in user.Role)<ItemGroup>
  65.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  66.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  67. </ItemGroup><ItemGroup>
  68.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  69.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  70. </ItemGroup>{<ItemGroup>
  71.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  72.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  73. </ItemGroup><ItemGroup>
  74.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  75.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  76. </ItemGroup>    claims.Add(new Claim(item.Id.ToString(), item.Role));<ItemGroup>
  77.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  78.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  79. </ItemGroup><ItemGroup>
  80.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  81.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  82. </ItemGroup>}<ItemGroup>
  83.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  84.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  85. </ItemGroup>    }<ItemGroup>
  86.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  87.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  88. </ItemGroup>    if(jwtConfig.SecurityKey == null)<ItemGroup>
  89.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  90.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  91. </ItemGroup>    {<ItemGroup>
  92.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  93.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  94. </ItemGroup><ItemGroup>
  95.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  96.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  97. </ItemGroup>throw new Exception("JwtConfig.SecurityKey 不能为空");<ItemGroup>
  98.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  99.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  100. </ItemGroup>    }<ItemGroup>
  101.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  102.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  103. </ItemGroup>    SymmetricSecurityKey key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtConfig.SecurityKey));<ItemGroup>
  104.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  105.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  106. </ItemGroup>    SigningCredentials creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);<ItemGroup>
  107.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  108.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  109. </ItemGroup>    JwtSecurityToken token = new JwtSecurityToken(<ItemGroup>
  110.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  111.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  112. </ItemGroup><ItemGroup>
  113.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  114.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  115. </ItemGroup>issuer:jwtConfig.Issuer,<ItemGroup>
  116.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  117.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  118. </ItemGroup><ItemGroup>
  119.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  120.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  121. </ItemGroup>audience:jwtConfig.Audience,<ItemGroup>
  122.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  123.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  124. </ItemGroup><ItemGroup>
  125.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  126.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  127. </ItemGroup>claims:claims,<ItemGroup>
  128.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  129.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  130. </ItemGroup><ItemGroup>
  131.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  132.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  133. </ItemGroup>expires: DateTime.UtcNow.AddMinutes(jwtConfig.ExpiresMinutes),<ItemGroup>
  134.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  135.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  136. </ItemGroup><ItemGroup>
  137.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  138.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  139. </ItemGroup>signingCredentials:creds<ItemGroup>
  140.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  141.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  142. </ItemGroup>    );<ItemGroup>
  143.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  144.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  145. </ItemGroup>    string resultToken = new JwtSecurityTokenHandler().WriteToken(token);<ItemGroup>
  146.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  147.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  148. </ItemGroup>    return resultToken;<ItemGroup>
  149.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  150.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  151. </ItemGroup>}    }}
复制代码
UserInfo
  1. namespace Programming.DotNetCore.Function.Password.Entity{    public class UserInfo    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>public string? UserName { get; set; }<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>public List? Role { get; set; }<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>public string? Extended1 { get; set; }<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup>public string? Extended2 { get; set; }<ItemGroup>
  14.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  15.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  16. </ItemGroup>public string? Extended3 { get; set; }<ItemGroup>
  17.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  18.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  19. </ItemGroup>public string? Extended4 { get; set; }<ItemGroup>
  20.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  21.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  22. </ItemGroup>public string? Extended5 { get; set; }    }}
复制代码
JwtConfig
  1. namespace Programming.DotNetCore.Function.Entity.Jwt{    public class JwtConfig    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>public string? Audience { get; set; }<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>public string? Issuer { get; set; }<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>public string? SecurityKey { get; set; }<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup>public int ExpiresMinutes { get; set; }    }}
复制代码
WebApi测试(获取Token)

Program.cs
  1. //读取Jwt配置
  2. builder.Services.Configure<JwtConfig>(builder.Configuration.GetSection("JwtTokenOptions"));
复制代码
appsetting.json
  1. {
  2.   "JwtTokenOptions": {
  3.     "Issuer": "http://localhost:5088",
  4.     "Audience": "http://localhost:5088",
  5.     "SecurityKey": "kq4DY5N1eFJhscOkI7Zp4Nd0WNy9d9AEsN6Yjgdv9OxLyol66tzGBKT_7vwolN7GZ8EDwqJBwccjDJfb81ws5s3sbbP5wUzQ3-PcTSsD-Rueiu2rsOUZwg_NR3RBCwmtouV-832YV2trCjNTawLB1z0LMukWGFNaAJVZ8WdQcrYn6a0ko5oVhZqaHBgsCLEGiqPtoFsiCcrJTz1IvXHk9_cDSr2hwEmSl18GlkOtgCHFH8aidYth3aQHRHuClTi6Y9mYRJtqqK-FNQYq4ZP23DSGZGFejJFTnM9YMpppuTMLklhSGySwX8rfjZ_0L5ac18nHaykTaiC2fvH00W42qQ"
  6.   }
  7. }
复制代码
Controller
  1. using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Options;using Programming.DotNetCore.Function.Entity.Jwt;using Programming.DotNetCore.Function.Interface.PasswordService;using Programming.DotNetCore.Function.Password.Entity;namespace Cnpc.Com.Ioc.WebApp.Controllers{    [Route("api/[controller]/[Action]")]    [ApiController]    public class TestJwtController : ControllerBase    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>IPassWordService _passWordService;<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>JwtConfig _jwtconfig;<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>public TestJwtController(IPassWordService passWordService,IOptions jwtconfig)<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup> {<ItemGroup>
  14.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  15.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  16. </ItemGroup>    _passWordService = passWordService;<ItemGroup>
  17.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  18.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  19. </ItemGroup>    _jwtconfig = jwtconfig.Value;<ItemGroup>
  20.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  21.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  22. </ItemGroup>}<ItemGroup>
  23.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  24.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  25. </ItemGroup>[HttpGet]<ItemGroup>
  26.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  27.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  28. </ItemGroup>public IActionResult Login(string userName,string passWord)<ItemGroup>
  29.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  30.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  31. </ItemGroup>{<ItemGroup>
  32.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  33.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  34. </ItemGroup>    string token = _passWordService.GetToken(new()<ItemGroup>
  35.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  36.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  37. </ItemGroup>    {<ItemGroup>
  38.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  39.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  40. </ItemGroup><ItemGroup>
  41.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  42.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  43. </ItemGroup>UserName = userName,<ItemGroup>
  44.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  45.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  46. </ItemGroup><ItemGroup>
  47.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  48.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  49. </ItemGroup>Extended1 = "无信息",<ItemGroup>
  50.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  51.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  52. </ItemGroup><ItemGroup>
  53.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  54.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  55. </ItemGroup>Role = new List()<ItemGroup>
  56.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  57.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  58. </ItemGroup><ItemGroup>
  59.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  60.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  61. </ItemGroup> {<ItemGroup>
  62.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  63.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  64. </ItemGroup><ItemGroup>
  65.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  66.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  67. </ItemGroup>     new RoleInfo() { Id = "1",Role="系统管理员"} ,<ItemGroup>
  68.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  69.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  70. </ItemGroup><ItemGroup>
  71.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  72.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  73. </ItemGroup>    new RoleInfo() { Id = "2",Role="用户管理员"} ,<ItemGroup>
  74.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  75.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  76. </ItemGroup><ItemGroup>
  77.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  78.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  79. </ItemGroup>}<ItemGroup>
  80.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  81.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  82. </ItemGroup>    }, new()<ItemGroup>
  83.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  84.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  85. </ItemGroup>    {<ItemGroup>
  86.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  87.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  88. </ItemGroup><ItemGroup>
  89.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  90.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  91. </ItemGroup>Audience = _jwtconfig.Audience,<ItemGroup>
  92.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  93.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  94. </ItemGroup><ItemGroup>
  95.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  96.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  97. </ItemGroup>Issuer= _jwtconfig.Issuer,<ItemGroup>
  98.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  99.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  100. </ItemGroup><ItemGroup>
  101.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  102.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  103. </ItemGroup>SecurityKey= _jwtconfig.SecurityKey,<ItemGroup>
  104.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  105.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  106. </ItemGroup><ItemGroup>
  107.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  108.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  109. </ItemGroup>ExpiresMinutes = 5,<ItemGroup>
  110.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  111.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  112. </ItemGroup>    });<ItemGroup>
  113.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  114.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  115. </ItemGroup>    return new JsonResult(new { token = token });<ItemGroup>
  116.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  117.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  118. </ItemGroup> }    }}
复制代码
.Net Core 验证(webApi)

Progarm

添加JWT验证
  1. builder.Services.AddAuthentication(options =>{    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;}).AddJwtBearer(options =>{    options.TokenValidationParameters = new TokenValidationParameters()    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>ValidateIssuer = true,<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>ValidIssuer = jwtConfig.Issuer, //发行人<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>ValidateAudience = true,<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup>ValidAudience = jwtConfig.Audience,//订阅人<ItemGroup>
  14.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  15.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  16. </ItemGroup>ValidateIssuerSigningKey = true,<ItemGroup>
  17.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  18.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  19. </ItemGroup>//对称加密密钥<ItemGroup>
  20.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  21.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  22. </ItemGroup>IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtConfig.SecurityKey!)),<ItemGroup>
  23.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  24.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  25. </ItemGroup>ValidateLifetime = true, //验证失效时间<ItemGroup>
  26.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  27.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  28. </ItemGroup>ClockSkew = TimeSpan.FromSeconds(30), //过期时间容错值<ItemGroup>
  29.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  30.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  31. </ItemGroup>RequireExpirationTime = true,<ItemGroup>
  32.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  33.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  34. </ItemGroup>AudienceValidator = (audiences, securityToken, validationParameters) =><ItemGroup>
  35.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  36.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  37. </ItemGroup>{<ItemGroup>
  38.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  39.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  40. </ItemGroup>    return true;<ItemGroup>
  41.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  42.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  43. </ItemGroup>},<ItemGroup>
  44.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  45.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  46. </ItemGroup>LifetimeValidator = (notBefore,expires,  securityToken, validationParameters) =><ItemGroup>
  47.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  48.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  49. </ItemGroup>{<ItemGroup>
  50.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  51.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  52. </ItemGroup>    return true;<ItemGroup>
  53.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  54.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  55. </ItemGroup>}    };});
复制代码
读取配置文件
  1. JwtConfig jwtConfig = new JwtConfig();
  2. builder.Configuration.Bind("JwtTokenOptions", jwtConfig);
复制代码
添加Swagger支持,api右上角可以写Token
  1. builder.Services.AddSwaggerGen(c =>{    //添加Jwt验证设置,添加请求头信息    c.AddSecurityRequirement(new OpenApiSecurityRequirement    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>{<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>    new OpenApiSecurityScheme<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>    {<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup><ItemGroup>
  14.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  15.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  16. </ItemGroup>Reference = new OpenApiReference<ItemGroup>
  17.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  18.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  19. </ItemGroup><ItemGroup>
  20.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  21.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  22. </ItemGroup>{<ItemGroup>
  23.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  24.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  25. </ItemGroup><ItemGroup>
  26.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  27.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  28. </ItemGroup>    Id = "Bearer",<ItemGroup>
  29.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  30.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  31. </ItemGroup><ItemGroup>
  32.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  33.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  34. </ItemGroup>    Type = ReferenceType.SecurityScheme<ItemGroup>
  35.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  36.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  37. </ItemGroup><ItemGroup>
  38.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  39.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  40. </ItemGroup>}<ItemGroup>
  41.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  42.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  43. </ItemGroup>    },<ItemGroup>
  44.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  45.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  46. </ItemGroup>    new List()<ItemGroup>
  47.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  48.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  49. </ItemGroup>}    });    //放置接口Auth授权按钮    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme    {<ItemGroup>
  50.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  51.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  52. </ItemGroup>Description = "Value Bearer {token}",<ItemGroup>
  53.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  54.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  55. </ItemGroup>Name = "Authorization",//jwt默认的参数名称<ItemGroup>
  56.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  57.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  58. </ItemGroup>In = ParameterLocation.Header,//jwt默认存放Authorization信息的位置(请求头中)<ItemGroup>
  59.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  60.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  61. </ItemGroup>Type = SecuritySchemeType.ApiKey    });}); ;
复制代码
Contorller
  1. using Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.AspNetCore.Authorization;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Options;using Programming.DotNetCore.Function.Entity.Jwt;using Programming.DotNetCore.Function.Interface.PasswordService;using Programming.DotNetCore.Function.Password.Entity;namespace Cnpc.Com.Ioc.WebApp.Controllers{    [Route("api/[controller]/[Action]")]    [ApiController]    public class TestJwtController : ControllerBase    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>[HttpGet]<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>public IActionResult TestApi()<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup>{<ItemGroup>
  14.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  15.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  16. </ItemGroup>    //获取用户Claim信息<ItemGroup>
  17.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  18.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  19. </ItemGroup>    var user = HttpContext.User.Claims.Select(it => new { it.Type,it.Value});<ItemGroup>
  20.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  21.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  22. </ItemGroup>    return new JsonResult(user);<ItemGroup>
  23.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  24.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  25. </ItemGroup>}    }}
复制代码
.Net Core 授权

简介

可以在数据库中进一步验证访问接口的权限
Program.cs
  1. //jwt 授权builder.Services.AddAuthorization(options =>{    options.AddPolicy("JwtPolicy", policy =>    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>//jwt 授权<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>//这里为自定义授权指定一下类<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup>.AddRequirements(new UserRoleRequirement(JwtBearerDefaults.AuthenticationScheme));     });});
复制代码
JwtAuthorization.cs

注意

验证中涉及到 IUserServices 和 JwtAuthorization, 需要在ioc容器中注册一下,我这里使用的是Autofac注册,如果使用系统自带的注册可以这么写:


  • builder.Services.AddTransient();
  • builder.Services.AddTransient();

Autofac 注册授权服务
  1. using Autofac;using Autofac.Extras.DynamicProxy;using Castle.DynamicProxy;using Cnpc.Com.Ioc.Bll;using Cnpc.Com.Ioc.Dal;using Cnpc.Com.Ioc.IBll;using Cnpc.Com.Ioc.IDal;using Cnpc.Com.Ioc.Tools;using Cnpc.Com.Ioc.WebApp.Authorization;using Cnpc.Com.Ioc.WebApp.Filter.ActionFilter;using Microsoft.AspNetCore.Authorization;using Programming.DotNetCore.Function.Interface.PasswordService;using Programming.DotNetCore.Function.Password;namespace WepApiTest.Autofac{    public class AutofacConfig : Module    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>protected override void Load(ContainerBuilder builder)<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>{<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>    //ioc<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup>    builder.RegisterType().As();<ItemGroup>
  14.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  15.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  16. </ItemGroup>    builder.RegisterType().As();<ItemGroup>
  17.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  18.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  19. </ItemGroup>}    }}
复制代码
  1. using Cnpc.Com.Ioc.IBll;using Microsoft.AspNetCore.Authorization;using System.Security.Claims;namespace Cnpc.Com.Ioc.WebApp.Authorization{    public class UserRoleRequirement : IAuthorizationRequirement    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>public string AuthenticateScheme;<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>public UserRoleRequirement(string authenticateScheme)<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>{<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup>    AuthenticateScheme = authenticateScheme;<ItemGroup>
  14.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  15.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  16. </ItemGroup>}    }    public class JwtAuthorization : AuthorizationHandler    {<ItemGroup>
  17.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  18.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  19. </ItemGroup>IUserServices userSercices;<ItemGroup>
  20.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  21.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  22. </ItemGroup>public JwtAuthorization(IUserServices userSercices)<ItemGroup>
  23.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  24.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  25. </ItemGroup>{<ItemGroup>
  26.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  27.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  28. </ItemGroup>    this.userSercices = userSercices;<ItemGroup>
  29.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  30.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  31. </ItemGroup>}<ItemGroup>
  32.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  33.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  34. </ItemGroup>protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, UserRoleRequirement requirement)<ItemGroup>
  35.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  36.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  37. </ItemGroup>{<ItemGroup>
  38.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  39.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  40. </ItemGroup>    string? userName = context.User.FindFirst(it => it.Type == ClaimTypes.Name)?.Value;<ItemGroup>
  41.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  42.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  43. </ItemGroup>    if (userSercices.IsAdmin(userName!))<ItemGroup>
  44.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  45.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  46. </ItemGroup>    {<ItemGroup>
  47.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  48.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  49. </ItemGroup><ItemGroup>
  50.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  51.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  52. </ItemGroup>context.Succeed(requirement);<ItemGroup>
  53.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  54.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  55. </ItemGroup>    }<ItemGroup>
  56.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  57.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  58. </ItemGroup>    else<ItemGroup>
  59.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  60.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  61. </ItemGroup>    {<ItemGroup>
  62.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  63.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  64. </ItemGroup><ItemGroup>
  65.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  66.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  67. </ItemGroup>context.Fail();<ItemGroup>
  68.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  69.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  70. </ItemGroup>    }<ItemGroup>
  71.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  72.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  73. </ItemGroup>    return Task.CompletedTask;<ItemGroup>
  74.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  75.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  76. </ItemGroup>}    }}
复制代码
Controller

注意

唯一需要修改的地方就是这里, 指定Policy 为 Program.cs 中设置授权方案名称

  • [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme,Policy = "JwtPolicy")]
  1. using Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.AspNetCore.Authorization;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Options;using Programming.DotNetCore.Function.Entity.Jwt;using Programming.DotNetCore.Function.Interface.PasswordService;using Programming.DotNetCore.Function.Password.Entity;namespace Cnpc.Com.Ioc.WebApp.Controllers{    [Route("api/[controller]/[Action]")]    [ApiController]    public class TestJwtController : ControllerBase    {<ItemGroup>
  2.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  3.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  4. </ItemGroup>[HttpGet]<ItemGroup>
  5.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  6.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  7. </ItemGroup>[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme,Policy = "JwtPolicy")]<ItemGroup>
  8.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  9.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  10. </ItemGroup>public IActionResult TestApi()<ItemGroup>
  11.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  12.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  13. </ItemGroup>{<ItemGroup>
  14.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  15.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  16. </ItemGroup>    var user = HttpContext.User.Claims.Select(it => new { it.Type,it.Value});<ItemGroup>
  17.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  18.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  19. </ItemGroup>    return new JsonResult(user);<ItemGroup>
  20.     <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.31.0" />
  21.     <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.31.0" />
  22. </ItemGroup>}    }}
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表