關於JWT.NET

來源:互聯網
上載者:User

標籤:tde   dict   程式   解密   目的   bubuko   try   傳遞   輸入   

1.JWT的概念:
JWT全稱是Json Web Token,是一種用於雙方之間傳遞安全資訊的簡潔的、URL安全的表述性聲明規範。JWT作為一個開放的標準( RFC 7519 ),定義了一種簡潔的,自包含的方法用於通訊雙方之間以Json對象的形式安全的傳遞資訊。因為數位簽章的存在,這些資訊是可信的,JWT可以使用HMAC演算法或者是RSA的公私秘鑰對進行簽名。

2.JWT的結構
JWT一般由三段構成,用.號分隔開,第一段是header,第二段是payload,第三段是signature,例如:

header(jwt的頭部)承載兩部分資訊就像JSON:
宣告類型。這裡是jwt
  聲明加密的演算法。通常直接使用 HMAC SHA256,其它還有RS256等

playload 載荷就是存放有效資訊的地方。這個名字像是特指飛機上承載的貨品,這些有效資訊包含三個部分:
標準中註冊的聲明
  公用的聲明
  私人的聲明
標準中註冊的聲明 (建議但不強制使用) :
iss : jwt簽發者
sub:jwt所面向的使用者
aud:接收jwt的一方
exp:jwt的到期時間,這個到期時間必須要大於簽發時間
nbf:定義在什麼時間之前,該jwt都是停用.
iat :jwt的簽發時間
jti :jwt的唯一身份標識,主要用來作為一次性token,從而迴避重放攻擊。

公用的聲明 :
公用的聲明可以添加任何的資訊,一般添加使用者的相關資訊或其他業務需要的必要資訊.但不建議添加敏感資訊,因為該部分在用戶端可解密

私人的聲明 :
私人聲明是提供者和消費者所共同定義的聲明,一般不建議存放敏感資訊,因為base64是對稱解密的,意味著該部分資訊可以歸類為明文資訊

定義一個playload

signature jwt的第三部分是一個簽證資訊,這個簽證資訊由三部分組成:
header (base64後的)
payload (base64後的)
secret

這個部分需要base64加密後的header和base64加密後的payload使用.串連組成的字串,然後通過header中聲明的加密方式進行加secret組合加密,然後就構成了jwt的第三部分

如何應用
一般是在要求標頭裡加入Authorization,並加上Bearer標註:

在項目的封裝管理員控制台 ,輸入以下:
Install-Package JWT -Version 3.0.0
安裝JWT.NET 3.0.0

        static void Main(string[] args)        {            IDateTimeProvider provider = new UtcDateTimeProvider();            var now = provider.GetNow();            var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);            var secondsSinceEpoch = Math.Round((now - unixEpoch).TotalSeconds);            var payload = new Dictionary<string, object>{               { "name", "MrBug" },               {"exp",secondsSinceEpoch+100 },               {"jti","luozhipeng" }            };            Console.WriteLine(secondsSinceEpoch);            IJwtAlgorithm algorithm = new HMACSHA256Algorithm();            IJsonSerializer serializer = new JsonNetSerializer();            IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();            IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);            string secret = "123";//密鑰            var token = encoder.Encode(payload, secret);            Console.WriteLine(token);            Decrypt(token,secret);            Console.ReadKey();        }        /// <summary>        ///  解密        /// </summary>        /// <param name="token">token資訊</param>        /// <param name="secret">密鑰</param>        private static void Decrypt(string token,string secret)        {            try            {                IJsonSerializer serializer = new JsonNetSerializer();                IDateTimeProvider provider = new UtcDateTimeProvider();                IJwtValidator validator = new JwtValidator(serializer, provider);                IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();                IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);                var json = decoder.Decode(token, secret, verify: true);//token為之前產生的字串                Console.WriteLine(json);            }            catch (TokenExpiredException)            {                Console.WriteLine("Token has expired");            }            catch (SignatureVerificationException)            {                Console.WriteLine("Token has invalid signature");            }        }

關於JWT.NET

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.