老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

基于JWT.NET的使用(詳解)

JWT是什么

成都創新互聯公司是一家專業提供平羅企業網站建設,專注與成都網站制作、成都網站建設、H5響應式網站、小程序制作等業務。10年已為平羅眾多企業、政府機構等服務。創新互聯專業網站設計公司優惠進行中。

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

JWT的結構

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

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiTXJCdWciLCJleHAiOjE1MTI5NTkzMDMuMCwianRpIjoibHVvemhpcGVuZyJ9.9iwGMHmS0mophyFgliLK15hs_eE770IchaZ-bWcX5c0

1、header

jwt的頭部承載兩部分信息:

聲明類型。這里是jwt

聲明加密的算法。通常直接使用 HMAC SHA256,其它還有RS256等

完整的頭部就像下面這樣的JSON:

{
"alg": "HS256",
"typ": "JWT"
}

然后將頭部進行base64加密(該加密是可以對稱解密的),構成了第一部分

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

2、playload

載荷就是存放有效信息的地方。這個名字像是特指飛機上承載的貨品,這些有效信息包含三個部分:

標準中注冊的聲明

公共的聲明

私有的聲明

標準中注冊的聲明 (建議但不強制使用) :

iss : jwt簽發者

sub:jwt所面向的用戶

aud:接收jwt的一方

exp:jwt的過期時間,這個過期時間必須要大于簽發時間

nbf:定義在什么時間之前,該jwt都是不可用的.

iat :jwt的簽發時間

jti :jwt的唯一身份標識,主要用來作為一次性token,從而回避重放攻擊。

公共的聲明 :

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

私有的聲明 :

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

定義一個playload

{
 "name": "MrBug",
 "exp": 1512959303,
 "jti": "luozhipeng"
}

然后將其進行base64加密,得到Jwt的第二部分

eyJuYW1lIjoiTXJCdWciLCJleHAiOjE1MTI5NTkzMDMuMCwianRpIjoibHVvemhpcGVuZyJ9

3、signature

jwt的第三部分是一個簽證信息,這個簽證信息由三部分組成:

header (base64后的)

payload (base64后的)

secret

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

// javascript
var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
 
var signature = HMACSHA256(encodedString, 'secret'); // 9iwGMHmS0mophyFgliLK15hs_eE770IchaZ-bWcX5c0

將這三部分用.連接成一個完整的字符串,構成了最終的jwt:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiTXJCdWciLCJleHAiOjE1MTI5NTkzMDMuMCwianRpIjoibHVvemhpcGVuZyJ9.9iwGMHmS0mophyFgliLK15hs_eE770IchaZ-bWcX5c0

注意:secret是保存在服務器端的,jwt的簽發生成也是在服務器端的,secret就是用來進行jwt的簽發和jwt的驗證,所以,它就是你服務端的私鑰,在任何場景都不應該流露出去。一旦客戶端得知這個secret, 那就意味著客戶端是可以自我簽發jwt了。

如何應用

一般是在請求頭里加入Authorization,并加上Bearer標注:

fetch('api/user/1', {
 headers: {
 'Authorization': 'Bearer ' + token
 }
})

服務端會驗證token,如果驗證通過就會返回相應的資源。整個流程就是這樣的:

基于JWT.NET的使用(詳解)

安全相關

不應該在jwt的payload部分存放敏感信息,因為該部分是客戶端可解密的部分。

保護好secret私鑰,該私鑰非常重要。

如果可以,請使用https協議

如何在.net中使用

這里要用到一個JWT.NET的第三方庫,可以通過NuGet的方式獲取,目前最新版是3.1.1,最新版只支持.net framework4.6及以上,如圖

基于JWT.NET的使用(詳解)

因為,我項目中用的是.net framework4.5,所以我安裝的是JWT.NET 3.0.0,你可以使用VS 工具 / NuGet包管理器 / 程序包管理器控制臺 ,輸入以下命令手動安裝

Install-Package JWT -Version 3.0.0

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

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
{
    { "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);
var token = encoder.Encode(payload, secret);
Console.WriteLine(token);

2、token解密

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");
}

3、自定義json解析器,只要繼承IJsonSerializer接口

public class CustomJsonSerializer : IJsonSerializer
{
  public string Serialize(object obj)
  {
    // Implement using favorite JSON Serializer
  }
  public T Deserialize(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);

4、自定義JSON序列化

默認的JSON序列化由JsonNetSerializer完成,可以自定義序列化:

JsonSerializer customJsonSerializer = new JsonSerializer
{
  // All json keys start with lowercase characters instead of the exact casing of the model/property. e.g. fullName
  ContractResolver = new CamelCasePropertyNamesContractResolver(), 
  
  // Nice and easy to read, but you can also do Formatting.None to reduce the payload size (by hardly anything...)
  Formatting = Formatting.Indented,
  
  // The best date/time format/standard.
  DateFormatHandling = DateFormatHandling.IsoDateFormat,
  
  // Don't add key/values when the value is null.
  NullValueHandling = NullValueHandling.Ignore,
  
  // Use the enum string-value, not the implicit int value, e.g. "oolor" : "red"
  Converters.Add(new StringEnumConverter())
};
IJsonSerializer serializer = new JsonNetSerializer(customJsonSerializer);

以上這篇基于JWT.NET的使用(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持創新互聯。


網頁名稱:基于JWT.NET的使用(詳解)
文章URL:http://www.xueling.net.cn/article/gjjooh.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 久久ク成人精品中文字幕 | 成人av一级 | 草碰在线 | 男人的网站你懂得 | 爽到憋不住潮喷大喷水视频 | 国产女合集小岁9三部 | 亚洲视频区| 一本一道波多野结衣av黑人 | 无码人妻一区二区三区免费视频 | 国产成人精品一区二区视频免费 | 色爱区成人综合网 | 作爱视频在线免费观看 | 亚洲乱亚洲乱妇 | 色播影院性播影院私人影院 | 亚洲男同gay在线观看 | 99精品国产一区二区 | 精品成人久久久 | 狠狠色丁香婷婷综合潮喷 | 久久精品无码中文字幕老司机 | 欧美一级特黄aaaaaa在线看片 | 欧美日韩资源 | 夫妻性生活视频免费看 | 鲁大师影院在线观看 | 成人av一级| 一级黄色美女片 | 亚洲最新免费视频 | 乱人伦中文字幕成人网站在线 | 93精品国产乱码久久久 | 久久精品无码免费不卡 | aa国产视频 | 中文字幕欧美亚洲 | 日韩一中文字无码不卡 | 日韩a在线看免费观看视频 国产做a爱一级毛片久 | 高清无码中字在线一区二区 | 久久xxxx | 无码专区丰满人妻斩六十路 | 亚洲清纯国产 | 免费在线一级视频 | 日本三级日本三级韩国三级视 | 99久久久无码一区二区三区婷婷 | 亚洲第7页|