JSON Web Token(JWT)是目前最流行的跨域身份驗(yàn)證解決方案。為了網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)發(fā)標(biāo)準(zhǔn)(RFC 7519),
桐梓ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!該token被設(shè)計(jì)為緊湊且安全的,特別適用于分布式站點(diǎn)的單點(diǎn)登陸(SSO)場(chǎng)景。JWT的聲明一般被用來(lái)在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,
以便于從資源服務(wù)器獲取資源,該token也可直接被用于認(rèn)證,也可被加密。
一、JWT的組成
下面是JWT的一段示例,分為三個(gè)部分,分別是頭部(header),載荷(payload)}和簽證(signature),他們之間用點(diǎn)隔開(kāi)。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJpc3MiOiLmtYHmnIjml6Dlj4wiLCJleHAiOjE1NzExMDIxNTMsInN1YiI6InRlc3RKV1QiLCJhdWQiOiJVU0VSIiwiaWF0IjoiMjAxOS8xMC8xNSA5OjE1OjQzIiwiZGF0YSI6eyJuYW1lIjoiMTExIiwiYWdlIjoxMSwiYWRkcmVzcyI6Imh2YmVpIn19.
25IbZpAbSXBQsr2k3h0IzKRAC6z3OJTWg38VDtcEER8
二、和傳統(tǒng)session的對(duì)比
JWT是基于json的鑒權(quán)機(jī)制,而且是無(wú)狀態(tài)的,服務(wù)器端是沒(méi)有如傳統(tǒng)那樣保存客戶端的登錄信息的,這就為分布式開(kāi)發(fā)提供了便利,
因?yàn)閭鹘y(tǒng)的方式是在服務(wù)端保存session信息,session是保存在內(nèi)存中的,當(dāng)客戶量變大的時(shí)候,對(duì)服務(wù)器的壓力自然會(huì)增大,
最關(guān)鍵的是在集群分布式中,每一次登錄的服務(wù)器可能不一樣,那么可能導(dǎo)致session保存在其中一個(gè)服務(wù)器,而另外一個(gè)服務(wù)器被請(qǐng)求的
時(shí)候還是無(wú)狀態(tài),除非你再次登錄,這就造成了很大的麻煩,也有人說(shuō)把session存放在專(zhuān)門(mén)的服務(wù)器,每次都去那個(gè)服務(wù)器請(qǐng)求,
我不認(rèn)為這是很好的解決方案,本來(lái)集群就是為了高可用,如果你配置session的服務(wù)器壞了,大家都跟著完蛋,所以JWT這種無(wú)狀態(tài)的方式
就非常適合這種分布式的系統(tǒng)。
三、代碼 JwtHelper
光說(shuō)不練假把式,下面還是來(lái)一段代碼。
還是老方式,先用NuGet把JWT引用進(jìn)來(lái),這里需要引入JWT和newtonsoft.json
如下圖所示:
然后就是生成JWT的方法。
static IJwtAlgorithm algorithm = new HMACSHA256Algorithm();//HMACSHA256加密 static IJsonSerializer serializer = new JsonNetSerializer();//序列化和反序列 static IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();//Base64編解碼 static IDateTimeProvider provider = new UtcDateTimeProvider();//UTC時(shí)間獲取 const string secret = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4aKpVo2OHXPwb1R7duLgg";//服務(wù)端 public static string CreateJWT(Dictionarypayload) { IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder); return encoder.Encode(payload, secret); }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。