最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JWT.net 操作實(shí)踐方法

 更新時(shí)間:2017年12月12日 10:19:03   作者:星輝Johnson  
下面小編就為大家分享一篇JWT.net 操作實(shí)踐方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

1.JWT定義

JWT(Json Web Token)是一種用于雙方之間傳遞安全信息的簡(jiǎn)潔的、URL安全的表述性聲明規(guī)范。JWT作為一個(gè)開(kāi)放的標(biāo)準(zhǔn)( RFC 7519 ),定義了一種簡(jiǎn)潔的,自包含的方法用于通信雙方之間以Json對(duì)象的形式安全的傳遞信息。因?yàn)閿?shù)字簽名的存在,這些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘鑰對(duì)進(jìn)行簽名。

2.JWT的組成部分

(1)JWT一般由三段構(gòu)成,用.號(hào)分隔開(kāi),第一段是header,第二段是payload,第三段是signature,

例如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

3.Jwt.Net 使用

首先,需要先引入Jwt.Net,可通過(guò)nuget的方式添加:Install-Package JWT -Version 2.4.2(自己選擇合適的版本)

(1)創(chuàng)建token,此處,我們只需要自定義payload和secrect密鑰即可,可生成三段格式的字符串

var payload = new Dictionary<string, object>
{
 { "claim1", 0 },
 { "claim2", "claim2-value" }
};
var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";
 
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
 
var token = encoder.Encode(payload, secret);
Console.WriteLine(token);

(2)token解密,可看到輸出為{ "claim1": 0, "claim2": "claim2-value" },可以用json["claim1"],json["claim2"]的方式獲取各個(gè)值,此處json為IDictionary<string,object>類(lèi)型token解密,可看到輸出為{ "claim1": 0, "claim2": "claim2-value" },可以用json["claim1"],json["claim2"]的方式獲取各個(gè)值,此處json為IDictionary<string,object>類(lèi)型

var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGFpbTEiOjAsImNsYWltMiI6ImNsYWltMi12YWx1ZSJ9.8pwBI_HtXqI3UgQHQ_rDRnSQRxFL1SR8fbQoS-5kM5s";
var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";
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);
 Console.WriteLine(json);
}
catch (TokenExpiredException)
{
 Console.WriteLine("Token has expired");
}
catch (SignatureVerificationException)
{
 Console.WriteLine("Token has invalid signature");
}

(3)添加過(guò)期時(shí)間,過(guò)期時(shí)間即這個(gè)時(shí)間之后JWT不接受處理,時(shí)間的有效值為某一時(shí)刻和1970/1/1 00:00:00 相差的秒數(shù)

下面的例子是當(dāng)前時(shí)間到1970/1/1 00:00:00 的秒數(shù),即過(guò)期時(shí)間為當(dāng)前時(shí)間。如果設(shè)置為當(dāng)前時(shí)間+10秒,可添加secondsSinceEpoch=secondsSinceEpoch+10

IDateTimeProvider provider = new UtcDateTimeProvider();
var now = provider.GetNow();
 
var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // or use JwtValidator.UnixEpoch
var secondsSinceEpoch = Math.Round((now - unixEpoch).TotalSeconds);
 
var payload = new Dictionary<string, object>
{
 { "exp", secondsSinceEpoch }
};
var secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";
var token = encoder.Encode(payload, secret);
 
var json = decoder.Decode(token, secret); // TokenExpiredException

(4)也可自定義json解析器,只要繼承IJsonSerializer接口

public class CustomJsonSerializer : IJsonSerializer
{
 public string Serialize(object obj)
 {
 // Implement using favorite JSON Serializer
 }
 
 public T Deserialize<T>(string json)
 {
 // Implement using favorite JSON Serializer
 }
}

使用該解析器

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

以上這篇JWT.net 操作實(shí)踐方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • VS.net VSS時(shí),編譯報(bào)錯(cuò):未能向文件“.csproj.FileListAbsolute.txt”寫(xiě)入命令行 對(duì)路徑 的訪問(wèn)被拒絕。

    VS.net VSS時(shí),編譯報(bào)錯(cuò):未能向文件“.csproj.FileListAbsolute.txt”寫(xiě)入命令行 對(duì)路

    在VSS上把項(xiàng)目的Bin和Obj目錄刪除,然后重新取出項(xiàng)目,編譯成功。
    2009-06-06
  • Unity中EventTrigger的幾種使用操作

    Unity中EventTrigger的幾種使用操作

    這篇文章主要介紹了Unity中EventTrigger的幾種使用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • C#多線程之Parallel類(lèi)的用法

    C#多線程之Parallel類(lèi)的用法

    這篇文章介紹了C#多線程之Parallel類(lèi)的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#實(shí)現(xiàn)讀取txt通用的方法小結(jié)

    C#實(shí)現(xiàn)讀取txt通用的方法小結(jié)

    這篇文章主要為大家詳細(xì)介紹了C#讀取txt通用的方法,兼容所有的UTF-8、Unicode(Little Endian)、BigEndianUnicode,有需要的小伙伴可以了解下
    2024-01-01
  • 最新評(píng)論

    蓬溪县| 固阳县| 娄底市| 襄城县| 江达县| 光泽县| 永善县| 壤塘县| 永川市| 清新县| 丹阳市| 日喀则市| 娱乐| 织金县| 诏安县| 连山| 瑞丽市| 闽侯县| 乡宁县| 雅江县| 长春市| 加查县| 霍邱县| 贵阳市| 大荔县| 锦州市| 通河县| 尼木县| 胶南市| 平和县| 乐亭县| 普洱| 昌都县| 会理县| 古浪县| 洛隆县| 遂溪县| 太湖县| 雷州市| 宁蒗| 广丰县|