日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java应用程序的令牌认证

發(fā)布時(shí)間:2023/12/3 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java应用程序的令牌认证 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

建筑物身份管理,包括身份驗(yàn)證和授權(quán)? 嘗試Stormpath! 我們的REST API和強(qiáng)大的Java SDK支持可以消除您的安全風(fēng)險(xiǎn),并且可以在幾分鐘內(nèi)實(shí)現(xiàn)。 注冊(cè) ,再也不會(huì)建立auth了!

2016年5月12日更新:構(gòu)建Java應(yīng)用程序? JJWT是一個(gè)Java庫(kù),由我們自己的Les Hazlewood開(kāi)發(fā),提供端到端JWT的創(chuàng)建和驗(yàn)證。 JJWT永久免費(fèi)且開(kāi)源(Apache許可證,版本2.0),易于使用和理解。 它的設(shè)計(jì)采用了以構(gòu)建者為中心的流暢界面,從而掩蓋了其大部分復(fù)雜性。 我們希望您能?chē)L試一下 ,并告訴我們您的想法! (并且,如果您是Node開(kāi)發(fā)人員,請(qǐng)查看NJWT !)

在我的上一篇文章中 ,我們涵蓋了很多基礎(chǔ),包括我們傳統(tǒng)上如何保護(hù)網(wǎng)站安全,使用cookie和會(huì)話的一些陷阱以及如何通過(guò)傳統(tǒng)方式解決這些陷阱。

在本文中,我們將超越傳統(tǒng),深入探討如何使用JWT(JSON Web令牌)進(jìn)行令牌身份驗(yàn)證,不僅解決了這些問(wèn)題,而且還為我們提供了可檢查的元數(shù)據(jù)和強(qiáng)大的加密簽名的好處。

救援的令牌認(rèn)證!

首先讓我們檢查一下在這種情況下authentication和token含義。

身份驗(yàn)證證明用戶就是他們所說(shuō)的真實(shí)身份。

令牌是一個(gè)獨(dú)立的信息塊。 它可能具有內(nèi)在價(jià)值,也可能沒(méi)有。 我們將研究一種特定類型的令牌, 它確實(shí)具有內(nèi)在價(jià)值,并通過(guò)會(huì)話ID解決了許多問(wèn)題。

JSON Web令牌(JWT)

JWT是URL安全,緊湊,自包含的字符串,其中包含有意義的信息,這些信息通常經(jīng)過(guò)數(shù)字簽名或加密。 它們正Swift成為網(wǎng)絡(luò)上令牌實(shí)施的實(shí)際標(biāo)準(zhǔn)。

URL安全是一種說(shuō)法,可以說(shuō)整個(gè)字符串都已編碼,因此沒(méi)有特殊字符,并且令牌可以放入U(xiǎn)RL中。

該字符串是不透明的,可以與使用會(huì)話ID幾乎相同的方式獨(dú)立使用。 不透明是指查看字符串本身沒(méi)有提供任何其他信息。

但是,還可以對(duì)字符串進(jìn)行解碼以提取元數(shù)據(jù),并且可以對(duì)簽名進(jìn)行加密驗(yàn)證,以使您的應(yīng)用程序知道令牌未被篡改。

JWT和OAuth2訪問(wèn)令牌

許多OAuth2實(shí)現(xiàn)都將JWT用于其訪問(wèn)令牌。 應(yīng)該指出的是,OAuth2和JWT規(guī)范是彼此完全獨(dú)立的,彼此之間沒(méi)有任何依賴關(guān)系。 將JWT用作OAuth2的令牌機(jī)制會(huì)帶來(lái)很多好處,我們將在下面看到。

JWT可以存儲(chǔ)在cookie中,但是我們之前討論的cookie的所有規(guī)則仍然適用。 您可以將會(huì)話ID完全替換為JWT。 然后,您可以獲得直接從該會(huì)話ID訪問(wèn)元信息的額外好處。

在野外,它們看起來(lái)就像是另一個(gè)丑陋的弦:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJleHAiOjEzMDA4MTkzODAsInN1YiI6InVzZXJzLzg5ODM0NjIiLCJzY29wZSI6InNlbGYgYXBpL2J1eSJ9.43DXvhrwMGeLLlP4P4izjgsBB2yrpo82oiUPhADakLs

如果仔細(xì)看,您會(huì)發(fā)現(xiàn)字符串中有兩個(gè)句點(diǎn)。 這些意義重大,因?yàn)樗鼈兘缍薐WT的不同部分。

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 . eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJleHAiOjEzMDA4MTkzODAsInN1YiI6InVzZXJzLzg5ODM0NjIiLCJzY29wZSI6InNlbGYgYXBpL2J1eSJ9 . 43DXvhrwMGeLLlP4P4izjgsBB2yrpo82oiUPhADakLs

JWT結(jié)構(gòu)

JWT具有三部分結(jié)構(gòu),每個(gè)部分都是base64編碼的:

以下是解碼的部分:

標(biāo)頭

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

索償

{"iss":"http://trustyapp.com/","exp": 1300819380,"sub": "users/8983462","scope": "self api/buy" }

密碼簽名

t?′—?à%O?v+n?…SZuˉμ€U…8H×

智威湯遜索賠

讓我們檢查索賠部分。 可以在此處找到屬于JWT規(guī)范的每種聲明。

iss是發(fā)行令牌的人。
exp是令牌過(guò)期的時(shí)間。
sub是令牌的主題。 這通常是某種用戶標(biāo)識(shí)符。

權(quán)利要求的以上部分全部包含在JWT規(guī)范中。 scope未包含在規(guī)范中,但通常用于提供授權(quán)信息。 也就是說(shuō),用戶可以訪問(wèn)應(yīng)用程序的哪些部分。

JWT的優(yōu)點(diǎn)之一是,可以將任意數(shù)據(jù)編碼到上述scope的權(quán)利要求中。 另一個(gè)優(yōu)點(diǎn)是,客戶端現(xiàn)在可以對(duì)該信息做出反應(yīng),而無(wú)需與服務(wù)器進(jìn)行任何進(jìn)一步的交互。 例如,可以基于在scope權(quán)利要求中找到的數(shù)據(jù)來(lái)隱藏頁(yè)面的一部分。

注意 :服務(wù)器始終驗(yàn)證客戶機(jī)執(zhí)行的操作仍然很關(guān)鍵,也是最佳實(shí)踐。 例如,如果在客戶端上執(zhí)行了某些管理操作,則您仍想在應(yīng)用程序服務(wù)器上驗(yàn)證當(dāng)前用戶是否有權(quán)執(zhí)行該操作。 您永遠(yuǎn)不會(huì)僅依賴客戶端授權(quán)信息。

您可能已經(jīng)獲得了另一個(gè)優(yōu)勢(shì):加密簽名。 簽名可以被驗(yàn)證,證明JWT未被篡改。 請(qǐng)注意,密碼簽名的存在并不保證機(jī)密性。 僅當(dāng)對(duì)JWT進(jìn)行加密和簽名時(shí),才能確保機(jī)密性。

現(xiàn)在,最重要的是: 無(wú)國(guó)籍 。 盡管服務(wù)器將需要生成JWT,但是它不需要將其存儲(chǔ)在任何地方,因?yàn)樗杏脩粼獢?shù)據(jù)都已直接編碼到JWT中。 服務(wù)器和客戶端可以來(lái)回傳遞JWT,而從不存儲(chǔ)它。 這樣可以很好地?cái)U(kuò)展。

管理承載令牌安全性

隱式信任是一種折衷。 這些類型的令牌通常稱為Bearer令牌,因?yàn)楂@得對(duì)應(yīng)用程序受保護(hù)部分的訪問(wèn)所需的全部就是有效的未過(guò)期令牌的表示。

您必須解決以下問(wèn)題:令牌應(yīng)使用多長(zhǎng)時(shí)間? 您將如何撤銷它? (還有其他整篇文章可以針對(duì)刷新令牌進(jìn)行 。)

如果未加密,則必須注意存儲(chǔ)在JWT中的內(nèi)容。 不要存儲(chǔ)任何敏感信息。 以sub權(quán)利要求的形式存儲(chǔ)用戶標(biāo)識(shí)符是一種普遍接受的做法。 當(dāng)JWT簽名時(shí),它稱為JWS。 加密后,稱為JWE。

Java,JWT和您!

我們?yōu)镚ithub上的JJWT項(xiàng)目感到自豪。 它是由Stormpath的首席技術(shù)官Les Hazlewood最初撰寫(xiě)的,它是針對(duì)Java的完全開(kāi)源的JWT解決方案。 它是最容易使用和理解的庫(kù),用于在JVM上創(chuàng)建和驗(yàn)證JSON Web令牌。

您如何創(chuàng)建JWT? 十分簡(jiǎn)單!

import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm;byte[] key = getSignatureKey();String jwt = Jwts.builder().setIssuer("http://trustyapp.com/").setSubject("users/1300819380").setExpiration(expirationDate).put("scope", "self api/buy") .signWith(SignatureAlgorithm.HS256,key).compact();

首先要注意的是用于創(chuàng)建JWT的流暢的 Builder API。 方法調(diào)用被鏈接在一起,最終以compact調(diào)用返回最終的JWT字符串。

還要注意,當(dāng)我們?cè)O(shè)置規(guī)范中的一項(xiàng)權(quán)利要求時(shí),我們使用了二傳手。 例如: .setSubject("users/1300819380") 。 設(shè)置自定義聲明后,我們會(huì)使用調(diào)用來(lái)放置并指定鍵和值。 例如: .put("scope", "self api/buy")

驗(yàn)證JWT一樣容易。

String subject = "HACKER"; try {Jws jwtClaims = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt);subject = claims.getBody().getSubject();//OK, we can trust this JWT} catch (SignatureException e) {//don't trust the JWT! }

如果對(duì)JWT進(jìn)行了任何篡改,則解析聲明將引發(fā)SignatureException并且subject變量的值將保持HACKER 。 如果它是有效的JWT,則將從中提取subject : claims.getBody().getSubject()

什么是OAuth?

在下一節(jié)中,我們將看一個(gè)使用Stormpath的OAuth2實(shí)現(xiàn)的示例,該實(shí)現(xiàn)利用了JWT。

OAuth2規(guī)范周?chē)泻芏嗬Щ蟆?那部分是因?yàn)樗_實(shí)是über規(guī)范–它具有很多復(fù)雜性。 這也是因?yàn)镺Auth1.a和OAuth2是非常不同的野獸。 我們將看一看OAuth2規(guī)范的一個(gè)非常具體,易于使用的子集。 我們有一篇很棒的文章,它詳細(xì)介紹了什么是OAuth 。 在這里,我們將提供一些簡(jiǎn)短的背景知識(shí),然后直接進(jìn)入示例。

OAuth2基本上是一種支持授權(quán)工作流程的協(xié)議。 這意味著它為您提供了一種確保特定用戶有權(quán)執(zhí)行某項(xiàng)操作的方法。

而已。

OAuth2 并不旨在執(zhí)行諸如驗(yàn)證用戶身份的工作, 而是由身份驗(yàn)證服務(wù)負(fù)責(zé)。 身份驗(yàn)證是在驗(yàn)證用戶身份( 例如要求輸入用戶名/密碼 )時(shí)進(jìn)行的驗(yàn)證,而授權(quán)是在檢查現(xiàn)有用戶已擁有的權(quán)限時(shí)進(jìn)行的驗(yàn)證。

請(qǐng)記住,OAuth2是授權(quán)協(xié)議。

使用OAuth授權(quán)類型進(jìn)行授權(quán)

讓我們看一下典型的OAuth2交互。

POST /oauth/token HTTP/1.1 Origin: https://foo.com Content-Type: application/x-www-form-urlencodedgrant_type=password&username=username&password=password

grant_type是grant_type 。 這種交互類型也需要application/x-www-form-urlencoded內(nèi)容類型。 假設(shè)您通過(guò)網(wǎng)絡(luò)傳遞用戶名和密碼,則始終希望連接是安全的。 不過(guò),好消息是,響應(yīng)將具有OAuth2承載令牌。 然后,此令牌將用于以后瀏覽器與服務(wù)器之間的每次交互。 這里有一個(gè)非常簡(jiǎn)短的介紹,其中用戶名和密碼是通過(guò)網(wǎng)絡(luò)傳遞的。 假設(shè)服務(wù)器上的身份驗(yàn)證服務(wù)驗(yàn)證了用戶名和密碼,則響應(yīng)如下:

HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache{"access_token":"2YotnFZFEjr1zCsicMWpAA...","token_type":"example","expires_in":3600,"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA...","example_parameter":"example_value" }

注意Cache-Control和Pragma標(biāo)頭。 我們不希望此響應(yīng)被緩存在任何地方。 access_token是瀏覽器在后續(xù)請(qǐng)求中將使用的內(nèi)容。 同樣,OAuth2和JWT之間沒(méi)有直接關(guān)系。 但是, access_token可以是JWT。 這就是編碼的元數(shù)據(jù)的額外好處所在。這是在以后的請(qǐng)求中利用訪問(wèn)令牌的方式:

GET /admin HTTP/1.1 Authorization: Bearer 2YotnFZFEjr1zCsicMW...

Authorization標(biāo)頭是標(biāo)準(zhǔn)標(biāo)頭。 使用OAuth2不需要自定義標(biāo)頭。 在這種情況下,類型是Bearer而不是Basic類型。 訪問(wèn)令牌直接包含在Bearer關(guān)鍵字之后。 這樣就完成了密碼授予類型的O??Auth2交互。 瀏覽器的每個(gè)后續(xù)請(qǐng)求都可以使用Authorizaion: Bearer標(biāo)頭和訪問(wèn)令牌。

還有另一種稱為client_credentials授予類型,它使用client_id和client_secret而不是username和password 。 此授予類型通常用于API交互。 盡管客戶ID和秘密機(jī)密的功能類似于用戶名和密碼,但它們通常具有更高的質(zhì)量安全性,并且不一定是人類可讀的。

帶我們回家:OAuth2 Java示例

我們到了! 現(xiàn)在該深入研究一些演示JWT的特定代碼了。

Spring Boot Web MVC

Stormpath Java SDK中有許多示例。 在這里,我們將看一個(gè)Spring Boot Web MVC示例。 這是示例中的HelloController :

@RestController public class HelloController {@RequestMapping("/")String home(HttpServletRequest request) {String name = "World";Account account = AccountResolver.INSTANCE.getAccount(request);if (account != null) {name = account.getGivenName();}return "Hello " + name + "!";}}

為了演示的目的,關(guān)鍵是:

Account account = AccountResolver.INSTANCE.getAccount(request);

在幕后,僅當(dāng)存在經(jīng)過(guò)身份驗(yàn)證的會(huì)話時(shí), account才會(huì)解析為Account對(duì)象(而不是null )。

生成并運(yùn)行示例代碼

要構(gòu)建并運(yùn)行此示例,請(qǐng)執(zhí)行以下操作:

? dogeared jobs:0 ~/Projects/StormPath/stormpath-sdk-java (master|8100m) ? cd examples/spring-boot-webmvc/ ? dogeared jobs:0 ~/Projects/StormPath/stormpath-sdk-java/examples/spring-boot-webmvc (master|8100m) ? mvn clean package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Stormpath Java SDK :: Examples :: Spring Boot Webapp 1.0.RC4.6-SNAPSHOT [INFO] ------------------------------------------------------------------------... skipped output ...[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.865 s [INFO] Finished at: 2015-08-04T11:46:05-04:00 [INFO] Final Memory: 31M/224M [INFO] ------------------------------------------------------------------------ ? dogeared jobs:0 ~/Projects/StormPath/stormpath-sdk-java/examples/spring-boot-webmvc (master|8100m

啟動(dòng)Spring Boot示例

然后,您可以像這樣啟動(dòng)Spring Boot示例:

? dogeared jobs:0 ~/Projects/StormPath/stormpath-sdk-java/examples/spring-boot-webmvc (master|8104m) ? java -jar target/stormpath-sdk-examples-spring-boot-web-1.0.RC4.6-SNAPSHOT.jar. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v1.2.1.RELEASE)2015-08-04 11:51:00.127 INFO 17973 --- [ main] tutorial.Application : Starting Application v1.0.RC4.6-SNAPSHOT on MacBook-Pro.local with PID 17973 ... skipped output ...2015-08-04 11:51:04.558 INFO 17973 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2015-08-04 11:51:04.559 INFO 17973 --- [ main] tutorial.Application : Started Application in 4.599 seconds (JVM running for 5.103)

注意 :這假設(shè)您已經(jīng)設(shè)置了一個(gè)Stormpath帳戶,并且您的api密鑰位于~/.stormpath/apiKey.properties 。 在此處查找有關(guān)使用Spring Boot快速設(shè)置Stormpath的更多信息。

使用JSON Web令牌進(jìn)行身份驗(yàn)證(或不進(jìn)行身份驗(yàn)證)

現(xiàn)在,我們可以練習(xí)該示例,并展示一些實(shí)際應(yīng)用中的JWT! 首先,在沒(méi)有任何身份驗(yàn)證的情況下命中端點(diǎn)。 我喜歡使用httpie ,但是任何命令行http客戶端都可以。

? http -v localhost:8080 GET / HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Connection: keep-alive Host: localhost:8080 User-Agent: HTTPie/0.9.2HTTP/1.1 200 OK Accept-Charset: big5, big5-hkscs, cesu-8, euc-jp, euc-kr, gb18030, ... Content-Length: 12 Content-Type: text/plain;charset=UTF-8 Date: Tue, 04 Aug 2015 15:56:41 GMT Server: Apache-Coyote/1.1Hello World!

-v參數(shù)產(chǎn)生詳細(xì)的輸出,并顯示請(qǐng)求和響應(yīng)的所有標(biāo)頭。 在這種情況下,輸出消息就是: Hello World! 。 這是因?yàn)闆](méi)有建立的會(huì)話。

使用Stormpath OAuth端點(diǎn)進(jìn)行身份驗(yàn)證

現(xiàn)在,讓我們點(diǎn)擊oauth端點(diǎn),以便我們的服務(wù)器可以使用Stormpath進(jìn)行身份驗(yàn)證。 您可能會(huì)問(wèn),“什么是oauth端點(diǎn)?” 上面的控制器未指示任何此類端點(diǎn)。 示例中是否還有其他具有其他端點(diǎn)的控制器? 不是,沒(méi)有! Stormpath提供了開(kāi)箱即用的oauth(和許多其他)端點(diǎn)。 一探究竟:

? http -v --form POST http://localhost:8080/oauth/token \ > 'Origin:http://localhost:8080' \ > grant_type=password username=micah+demo.jsmith@stormpath.com password= POST /oauth/token HTTP/1.1 Content-Type: application/x-www-form-urlencoded; charset=utf-8 Host: localhost:8080 Origin: http://localhost:8080 User-Agent: HTTPie/0.9.2grant_type=password&username=micah%2Bdemo.jsmith%40stormpath.com&password=HTTP/1.1 200 OK Cache-Control: no-store Content-Length: 325 Content-Type: application/json;charset=UTF-8 Date: Tue, 04 Aug 2015 16:02:08 GMT Pragma: no-cache Server: Apache-Coyote/1.1 Set-Cookie: account=eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNDQyNmQxMy1mNThiLTRhNDEtYmVkZS0wYjM0M2ZjZDFhYzAiLCJpYXQiOjE0Mzg3MDQxMjgsInN1YiI6Imh0dHBzOi8vYXBpLnN0b3JtcGF0aC5jb20vdjEvYWNjb3VudHMvNW9NNFdJM1A0eEl3cDRXaURiUmo4MCIsImV4cCI6MTQzODk2MzMyOH0.wcXrS5yGtUoewAKqoqL5JhIQ109s1FMNopL_50HR_t4; Expires=Wed, 05-Aug-2015 16:02:08 GMT; Path=/; HttpOnly{"access_token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNDQyNmQxMy1mNThiLTRhNDEtYmVkZS0wYjM0M2ZjZDFhYzAiLCJpYXQiOjE0Mzg3MDQxMjgsInN1YiI6Imh0dHBzOi8vYXBpLnN0b3JtcGF0aC5jb20vdjEvYWNjb3VudHMvNW9NNFdJM1A0eEl3cDRXaURiUmo4MCIsImV4cCI6MTQzODk2MzMyOH0.wcXrS5yGtUoewAKqoqL5JhIQ109s1FMNopL_50HR_t4","expires_in": 259200,"token_type": "Bearer" }

這里有很多事情,所以讓我們分解一下。

在第一行中,我告訴httpie我想創(chuàng)建一個(gè)表單url編碼的POST,這就是--form和POST參數(shù)的作用。 我正在本地運(yùn)行的服務(wù)器的/oauth/token端點(diǎn)上。 我指定一個(gè)Origin標(biāo)頭。 出于我們先前提到的安全原因,與Stormpath進(jìn)行交互是必需的。 根據(jù)OAuth2規(guī)范,我要傳遞grant_type=password以及username和password 。

響應(yīng)具有Set-Cookie標(biāo)頭以及包含OAuth2訪問(wèn)令牌的JSON正文。 你猜怎么著? 該訪問(wèn)令牌也是JWT。 以下是已解碼的聲明:

{"jti": "14426d13-f58b-4a41-bede-0b343fcd1ac0","iat": 1438704128,"sub": "https://api.stormpath.com/v1/accounts/5oM4WI3P4xIwp4WiDbRj80","exp": 1438963328 }

注意sub鍵。 這就是我驗(yàn)證為的帳戶的完整Stormpath URL。 現(xiàn)在,讓我們?cè)俅吸c(diǎn)擊基本的Hello World端點(diǎn),僅這次,我們將使用OAuth2訪問(wèn)令牌:

? http -v localhost:8080 \ > 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNDQyNmQxMy1mNThiLTRhNDEtYmVkZS0wYjM0M2ZjZDFhYzAiLCJpYXQiOjE0Mzg3MDQxMjgsInN1YiI6Imh0dHBzOi8vYXBpLnN0b3JtcGF0aC5jb20vdjEvYWNjb3VudHMvNW9NNFdJM1A0eEl3cDRXaURiUmo4MCIsImV4cCI6MTQzODk2MzMyOH0.wcXrS5yGtUoewAKqoqL5JhIQ109s1FMNopL_50HR_t4' GET / HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxNDQyNmQxMy1mNThiLTRhNDEtYmVkZS0wYjM0M2ZjZDFhYzAiLCJpYXQiOjE0Mzg3MDQxMjgsInN1YiI6Imh0dHBzOi8vYXBpLnN0b3JtcGF0aC5jb20vdjEvYWNjb3VudHMvNW9NNFdJM1A0eEl3cDRXaURiUmo4MCIsImV4cCI6MTQzODk2MzMyOH0.wcXrS5yGtUoewAKqoqL5JhIQ109s1FMNopL_50HR_t4 Connection: keep-alive Host: localhost:8080 User-Agent: HTTPie/0.9.2HTTP/1.1 200 OK Content-Length: 11 Content-Type: text/plain;charset=UTF-8 Date: Tue, 04 Aug 2015 16:44:28 GMT Server: Apache-Coyote/1.1Hello John!

請(qǐng)注意,在輸出的最后一行中,消息是通過(guò)名稱尋址我們的。 現(xiàn)在,我們已經(jīng)使用OAuth2與Stormpath建立了經(jīng)過(guò)身份驗(yàn)證的會(huì)話,控制器中的以下幾行將檢索名字:

Account account = AccountResolver.INSTANCE.getAccount(request); if (account != null) {name = account.getGivenName(); }

摘要:Java應(yīng)用程序的令牌認(rèn)證

在本文中,我們研究了使用JWT進(jìn)行令牌身份驗(yàn)證如何不僅解決傳統(tǒng)方法的問(wèn)題,而且還為我們提供了可檢查的元數(shù)據(jù)和強(qiáng)大的密碼簽名的好處。

我們概述了OAuth2協(xié)議,并詳細(xì)介紹了Stormpath的OAuth2實(shí)現(xiàn)如何使用JWT。

以下是指向基于令牌的身份驗(yàn)證,JWT和Spring Boot的文章的其他鏈接:

  • Angular.js的基于令牌的身份驗(yàn)證
  • JJWT –適用于Java和Android的JSON Web令牌
  • Spring Boot Webapp示例快速入門(mén)
  • JWT規(guī)范

建筑物身份管理,包括身份驗(yàn)證和授權(quán)? 嘗試Stormpath! 我們的REST API和強(qiáng)大的Java SDK支持可以消除您的安全風(fēng)險(xiǎn),并且可以在幾分鐘內(nèi)實(shí)現(xiàn)。 注冊(cè) ,再也不會(huì)建立auth了!

翻譯自: https://www.javacodegeeks.com/2016/07/token-authentication-java-applications.html

總結(jié)

以上是生活随笔為你收集整理的Java应用程序的令牌认证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。