2023年6月20日发(作者:)
WebApi使⽤JWT认证(⼀)这是第⼀部:先实现NetFramework上的WebApi使⽤JWT认证1、VS新建⼀个WebApi项⽬2、项⽬右键----管理Nuget程序包----找到JWT,然后安装3、Model⽂件夹下新建三个类LoginResult,LoginRequest,AuthInfo 1 namespace 2 { 3 public class LoginResult 4 { 5 public bool Success { get; set; } 6
7 public string Token { get; set; } 8
9 public string Message { get; set; }10 }11 }1 namespace 2 {3 public class LoginRequest4 {5 public string UserName { get; set; }6
7 public string Password { get; set; }8 }9 } 1 using c; 2
3 namespace 4 { 5 public class AuthInfo 6 { 7 //模拟JWT的payload 8 public string UserName { get; set; } 9
10 public List
12 public bool IsAdmin { get; set; }13 }14 }4、在Controllers⽂件夹中的HomeController(没有就新建⼀个)中添加⼀个Post⽅法,这是⽣成JWT Token⽅法的地⽅,⼀般应放在登录的Action下 1 using JWT; 2 using thms; 3 using izers; 4 using ; 5 using System; 6 using c; 7 using ; 8
9 namespace llers10 {11 public class HomeController : ApiController12 {13 public LoginResult Post([FromBody]LoginRequest request)14 {15 LoginResult rs = new LoginResult();16 //这是是获取⽤户名和密码的,这⾥只是为了模拟17 if (me == "wangshibang" && rd == "123456")18 {19 AuthInfo info = new AuthInfo { UserName = "wangshibang", Roles = new List
9 namespace utes10 {11 public class ApiAuthorizeAttribute : AuthorizeAttribute12 {13 protected override bool IsAuthorized(HttpActionContext actionContext)14 {15 var authHeader = from t in s where == "auth" select rDefault();16 if (authHeader != null)17 {18 string token = rDefault();19 if (!OrEmpty(token))20 {21 try22 {23 const string secret = "To Live is to change the world";24 //secret需要加密25 IJsonSerializer serializer = new JsonNetSerializer();26 IDateTimeProvider provider = new UtcDateTimeProvider();27 IJwtValidator validator = new JwtValidator(serializer, provider);28 IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();29 IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);30
31 var json = ToObject
5 namespace llers 6 { 7 public class UserController : ApiController 8 { 9 // GET: User10 [ApiAuthorize]11 public string Get()12 {13 AuthInfo info = ["auth"] as AuthInfo;14 if (info == null)15 {16 return "获取不到,失败";17 }18 else19 {20 return $"获取到了,Auth的Name是 {me}";21 }22 }23 }24 }7、然后⽤PostMan测试下⾯是解决接⼝调⽤的跨域问题,有两种,⼀种是⽤CORS,另外⼀种就是修改WebConfig添加⾃定义options谓词处理模块我只⽤了⾃定义Options谓词处理 1
23
24
28 63 64发布者:admin,转转请注明出处:http://www.yc00.com/news/1687249937a30.html
评论列表(0条)