记录一次C#使用JWT单点登录

记录一次C#使用JWT单点登录好久没更新了,最近确实比较忙,现在弄完后,第一时间来记录一下最近学到的一些东西JWT单点登录一、简单介绍 JWT全称是JSONWebToken,是一种是目前最流行的跨域身份验证解决方案。为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC7519),该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,该token也可直接被用于认证,也可被加.

大家好,又见面了,我是你们的朋友全栈君。

好久没更新了,最近确实比较忙,现在弄完后,第一时间来记录一下最近学到的一些东西

JWT单点登录

一、简单介绍

  1. JWT全称是JSON Web Token,是一种是目前最流行的跨域身份验证解决方案。为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519),该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,该token也可直接被用于认证,也可被加密,单点登录的含义这里就不具体介绍了

  2. JWT实际上一个字符串由三部分组成头部(Header)、载荷(Payload)与签名(signature)

二、具体使用

1.下载jwt工具包

我这里就以一个新的mvc项目来演示,创好项目后,在nuget包管理器中,下载jwt,不要下错了哈记录一次C#使用JWT单点登录

等待安装完成

记录一次C#使用JWT单点登录

 

2.方法使用

2.1.生成jwt_token

导入这些命名空间记录一次C#使用JWT单点登录,然后进行生成操作

        public string GetJWT_Token() 
        {
            var payload = new Dictionary<string, object>
            {
                { "claim1", 0 },
                { "claim2", "claim2-value" }
            };
            const string secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";

            IJwtAlgorithm algorithm = new HMACSHA256Algorithm(); // symmetric
            IJsonSerializer serializer = new JsonNetSerializer();
            IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
            IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);

            var token = encoder.Encode(payload, secret);
            return token;
        }

这里简单测试一下用postman或者浏览器直接访问都可以,我这里就直接浏览器测试了,生成成功后会得到一串字符串

记录一次C#使用JWT单点登录

可以看到这个字符串是由三部分组成的,这样就得到一个jwttoken,然后访问别人的网站时候带上这串字符串,他就会同样的jwt方法去解析出你字符串附带的用户信息之类的

这里把解析的方法也提供一下

public string DecodingToken(string Token) 
        {
            string token = Token;
//这里密钥同上,需要两边密钥同步才能解出来
            const string secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";

            try
            {
                IJsonSerializer serializer = new JsonNetSerializer();
                var provider = new UtcDateTimeProvider();
                IJwtValidator validator = new JwtValidator(serializer, provider);
                IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
                IJwtAlgorithm algorithm = new HMACSHA256Algorithm(); // symmetric
                IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder, algorithm);

                var json = decoder.Decode(token, secret, verify: true);
                return json;
            }
            catch (TokenExpiredException ex)
            {
                return ex.Message;
            }
            catch (SignatureVerificationException ex)
            {
                return ex.Message;
            }
        }

把上面获得的token代入进去,就可以解析出值了

记录一次C#使用JWT单点登录

后面怎么操作这些值就根据自己的业务逻辑来处理了


后面有时间在更新一篇rabbitmq的操作,今年应该就这样了,工作第一年,学习的东西还是不够多还需继续努力哈哈

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143910.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dedecms系统后台登陆提示用户名密码不存在

    dedecms系统后台登陆提示用户名密码不存在

    2021年10月7日
    43
  • Linux内核移植_rom内核移植

    Linux内核移植_rom内核移植这两天在友善的tiny210的实验板上移植了linux内核,正好和大家分享,同时也算是做个记录吧!首先介绍一下开发环境吧,这个在做移植的时候还是挺重要的。主机linux:Fedora9 安装在VMware虚拟机上;开发板 :友善的tiny210,256M的FLASH;移植linux:LINUX-3.3.5;交叉编译环境:arm-linux-gcc-4.4.3这个是友善24

    2022年9月24日
    4
  • JS之在Vue对象内部获取vue对象的索引(箭头函数的闭包导致this代表的是函数本身)「建议收藏」

    JS之在Vue对象内部获取vue对象的索引(箭头函数的闭包导致this代表的是函数本身)「建议收藏」es6过后引入了箭头函数(=>),使用this的时候,无法访问data中的内容。特此记录方法:<script>letvue=newVue({el:”#app”,data:{message:”helloworld!”},methods:{…

    2022年6月29日
    52
  • LNK2001:无法解析外部符号_sprintf

    LNK2001:无法解析外部符号_sprintfLNK2001:无法解析外部符号_sprintf与LNK1104:无法打开文件“kernel32.lib”_臻訾胃的博客-CSDN博客从网上下载一个VS的demo,编译之后老是报LNK2001:无法解析外部符号_sprintf的错误,找了好久,发现在项目属性->链接器->输入->附加目录依赖项添加legacy_stdio_definitions.lib即可解决问题。但不知道legacy_stdio_definitions.lib这玩意儿干啥的,有兴趣的自己百度吧..

    2022年6月28日
    55
  • Builder 构造器模式[通俗易懂]

    Builder 构造器模式[通俗易懂]Builder 构造器模式动机模式定义实例结构要点总结笔记动机在软件系统中,有时候面临着”一个复杂对象“的创建过程,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却通常相对稳定。如何应对这种变化?如何提供一种”封装机制“来隔离出”复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?模式定义将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建出不通的表示(变化)实例构

    2022年8月9日
    10
  • vscode前端插件简单配置

    vscode前端插件简单配置AutoCloseTaghtml标签自动闭合Chinese(Simplified)(简体中文)LanguagePackforVisualStudioCodevscode中文插件儿EasyLESS项目无框架无webpack时可以使用的一个less转换插件settings.json配置”less.compile”:{ “out”:false,//是否输出css文件,false为不输出 “compress”:false,//是否压缩 “sour..

    2022年7月25日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号