博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
任务37:生成 JWT Token
阅读量:5157 次
发布时间:2019-06-13

本文共 3006 字,大约阅读时间需要 10 分钟。

 

实现给用户办法token

默认是可以访问valuesController的,返回的状态是200

http://localhost:5429/api/values

 

返回的状态码是200

 

把ValuesController加上属性值:[Authorize]

再次访问,没有权限访问。返回401状态码

 

新建文件夹:ViewModels

LoginViewModel类来接收用户的参数和密码:

using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;namespace JwtAuthSample.ViewModels{    public class LoginViewModel    {        public string User { get; set; }        public string Password { get; set; }    }}
LoginViewModel

 

 

创建API控制器:AuthorizeController

 

给LoginViewModel加上必填的属性:

 

我们要把。appsettings.json内配置的jwtsettings的信息读取出来

所以这里引入命名空间:using Microsoft.Extensions.Options;

 

 

然后需要生成我们的tokens需要引入命名空间:

 

 

VScode需要安装Nuet的包的扩展

我在VS2017里面直接安装包:Microsoft.AspNetCore.Authentication.JwtBearer

然后可以引入我们的命名空间了:

using System.IdentityModel.Tokens.Jwt;

生成token的代码

 

using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc;using JwtAuthSample.ViewModels;using System.Security.Claims;using Microsoft.IdentityModel.Tokens;using Microsoft.Extensions.Options;using System.Text;using System.IdentityModel.Tokens.Jwt;
命名空间

 

 

public IActionResult Token(LoginViewModel viewmodel)        {            if (ModelState.IsValid)            {                if (!(viewmodel.User == "wjw" && viewmodel.Password == "123456"))                {                    return BadRequest();                }                var claims = new Claim[] {                    new Claim(ClaimTypes.Name,"wjw"),                    new Claim(ClaimTypes.Role,"admin")                };                var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtsettings.SecretKey));                //把我们的key放进来,并给它一个算法                var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);                var token = new JwtSecurityToken(                    _jwtsettings.Issure,                     _jwtsettings.Audoence,                    claims,                     DateTime.Now,//当前时间                    DateTime.Now.AddMinutes(30),//过期时间 加了30分钟                    creds);                return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });            }            return BadRequest();        }
Token

 

 

这里要注意一下:我们需要在StartUp里面进行配置

 

 

StartUp里面配置

 

 

SecretKey的长度必须大于16个字符,也就是128个字节以上

 

 

必须配置上默认的路由才能访问到我的AuthorizeController

如果不配置默认的路由信息就访问不到这个Controller

 

app.UseMvc(routes =>            {                routes.MapRoute(                    name: "Default",                    template: "{controller}/{action}/{id?}",                    defaults: new { controller = "Authorize", action = "post" }                );            });

 

直接用默认的路由也是可以的:相当于上面那一段routes.MapRoute{}那一段代码

app.UseMvcWithDefaultRoute();

 

 

http://localhost:5429/Authorize/Post?User=wjw&Password=123456

参数user:wjw

参数2:Password:123456

复制获取到的token

Authorization:bearer 复制的token的值

 

出现错误的原因:

 


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
标签
我在关注他 取消关注
0
0
上一篇:
下一篇:

转载于:https://www.cnblogs.com/owenzh/p/11301005.html

你可能感兴趣的文章
博客盈利请先考虑这七点
查看>>
使用 XMLBeans 进行编程
查看>>
写接口请求类型为get或post的时,参数定义的几种方式,如何用注解(原创)--雷锋...
查看>>
【OpenJ_Bailian - 2287】Tian Ji -- The Horse Racing (贪心)
查看>>
Java网络编程--socket服务器端与客户端讲解
查看>>
List_统计输入数值的各种值
查看>>
学习笔记-KMP算法
查看>>
Timer-triggered memory-to-memory DMA transfer demonstrator
查看>>
跨域问题整理
查看>>
[Linux]文件浏览
查看>>
64位主机64位oracle下装32位客户端ODAC(NFPACS版)
查看>>
获取国内随机IP的函数
查看>>
今天第一次写博客
查看>>
江城子·己亥年戊辰月丁丑日话凄凉
查看>>
IP V4 和 IP V6 初识
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
『Raid 平面最近点对』
查看>>
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>
C语言基础小结(一)
查看>>