首页 > 作文

.net core api接口JWT方式认证Token

更新时间:2023-04-04 02:36:45 阅读: 评论:0

一、项目>管理nuget包 安装

二、.appttings.json添加

"jwt": {    "cret": "~!@#$%^&*()_+qwertyuiopasldkh[o51485421ajshk^%*)kasd", // 密钥    "issuer": "kfjdhf", // 颁发者    "audience": "kfjdhf", // 接收者    //"expired": 30 // 过期时间(30min)  }

三、configurervices注入jwt

 #region 注册jwt             //获取配置文件            var jwtconfig = configuration.getction("jwt");            //生成密钥            var symmetrickeyasba64 = jwtconfig.getvalue<string>("cret");            var keybytearray = encoding.ascii.getbytes(symmetrickeyasba64);            var signingkey = new symmetriccuritykey(keybytearray);             //认证参数            rvices.addauthentication("bearer")                .addjwtbearer(o =>                {                    o.tokenvalidationparameters = new tokenvalidationparameters                    {                        validateissuersigningkey = true,//是否验证签名,不验证的画可以篡改数据,不安全                        issuersigningkey = signingkey,//解密的密钥                        validateissuer = true,//是否验证发行人,就是验证载荷中的iss是否对应validissuer参数                        validissuer = jwtconfig.getvalue<string>("iss"),//发行人                        validateaudience = true,//是否验证订阅人,就是验证载荷中的aud是否对应validaudience参数                        validaudience = jwtconfig.getvalue<string>("aud"),//订阅人                        validatelifetime = true,//是否验证过期时间,过期了就拒绝访问                        clockskew = timespan.zero,//这个是缓冲过期时间,也就是说,即使我们配置了过期时间,这里也要考虑进去,过期时间+缓冲,默认好像是7分钟,你可以直接设置为0                        requireexpirationtime = true,                    };      试用期员工考核表          });            #endregion

(2).configure启用

app.uauthentication();//jwt

四、创建jwt帮助类

using microsoft.extensions.configuration;using microsoft.identitymodel.tokens;using system;using system.collections.generic;using system.identitymodel.tokens.jwt;using system.linq;using system.curity.claims;using system.text; namespace systemapi.jwt{        public class jwthelper        {            public jwthelper(iconfiguration configuration)            {                configuration = configuration;            }            /// <summary>            /// 配置属性            /// </summary>            public iconfiguration configuration { get; }            /// <summary>            /// 生成token            /// </summary>            /// <returns></returns>            public string genera托福官网报名tetoken(list<claim> claims)            {                var jwtconfig = configuration.getction("jwt");                //秘钥,就是标头,这里用hmacsha256算法,需要256bit的密钥                var curitykey = new signingcredentials(new symmetriccuritykey(encoding.ascii.getbytes(jwtconfig.getvalue<string>("cret"))), curityalgorithms.hmacsha256);                //claim,jwtregisteredclaimnames中预定义了好多种默认的参数名,也可以像下面的guid一样自己定义键名.                //claimtypes也预定义了好多类型如role、email、name。role用于赋予权限,不同的角色可以访问不同的接口                //相当于有效载荷                list<claim> baclaims = new list<claim>{                new claim(jwtregisteredclaimnames.iss,jwtconfig.getvalue<string>("issuer")),                new claim(jwtregisteredclaimnames.aud,jwtconfig.getvalue<string>("audience")),                new claim("guid",guid.newguid().tostring("d")),                new claim(claimtypes.role,"admin"),             };黄石市人事局          西宫秋怨      claims = claims.union<claim>(baclaims).tolist<claim>();//合并claim,删除重复项目                 curitytoken curitytoken = new jwtcuritytoken(                    signingcredentials: curitykey,                    expires: datetime.now.adddays(1),//过期时间                    claims: claims               分式方程的解法 );                //生成jwt令牌                return new jwtcuritytokenhandler().writetoken(curitytoken);            }        }    }

五、测试登录成功把账户信息存进token

 /// 登录        /// </summary>        /// <returns>登录</returns>        [httpget]         public returnjson login(string name, string pwd)        {                        ur data = bll.login(name, pwd);            if (data!=null)            {                if (data.name == name && data.password == pwd)                {                    list<claim> claims = new list<claim>() {                    new claim(claimtypes.nameidentifier, data.name),                    new claim(claimtypes.role,data.adminid.tostring()),                    new claim("adminrole",data.adminid.tostring())                    };                    string token=jwthelper.generatetoken(claims);                      return new returnjson<string>().success(token);                                                      };                          }            return new returnjson().fail();        }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 02:36:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/4b382258d2e1f928c770edad7772456d.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:.net core api接口JWT方式认证Token.doc

本文 PDF 下载地址:.net core api接口JWT方式认证Token.pdf

标签:密钥   时间   载荷   参数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图