簡體   English   中英

如何在spring boot 2 oauth2中獲得令牌?

[英]How get a token in spring boot 2 oauth2?

我是春天安全oauth2的新手。 我想運行此授權服務器示例代碼 我成功運行它,為獲得令牌,我設置postman如下,然后發送請求:

基本認證 授權類型

在這種情況下,我輸入了客戶端ID及其密碼,但我想在沒有它們的情況下登錄。 例如,我的用戶發送用戶名,密碼和客戶端ID,然后獲取令牌。 但是我發送的每個請求,服務器返回401響應。 Spring boot 2 oauth 2中, 我該怎么做?

1)要獲取訪問令牌,您必須使用此類請求:

curl --user client:secret \
  -X POST http://localhost:8080/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=password&username=username&password=password&scope=*" \

使用Basic Auth和您的應用程序憑據(如果您願意,可以避免使用此秘密)。 您必須在請求正文中傳遞的用戶名及其密碼以及grant_type字段中的“password”值。

作為響應,您可以訪問並刷新令牌,例如:

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImV4cCI6MTU0Nzc2NDIzOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiYzk1YzkzYTAtMThmOC00OGZjLWEzZGUtNWVmY2Y1YWIxMGE5IiwiY2xpZW50X2lkIjoiY2xpZW50In0.RWSGMC0w8tNafT28i2GLTnPnIiXfAlCdydEsNNZK-Lw",
    "token_type": "bearer",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImF0aSI6ImM5NWM5M2EwLTE4ZjgtNDhmYy1hM2RlLTVlZmNmNWFiMTBhOSIsImV4cCI6MTU0Nzc2NzcxOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiZDRhNGU2ZjUtNDY2Mi00NGZkLWI0ZDgtZWE5OWRkMDJkYWI2IiwiY2xpZW50X2lkIjoiY2xpZW50In0.m7XvxwuPiTnPaQXAptLfi3CxN3imfQCVKyjmMCIPAVM",
    "expires_in": 119,
    "scope": "*"
    "jti": "c95c93a0-18f8-48fc-a3de-5efcf5ab10a9"
}

2)然后,您可以使用該訪問令牌來訪問服務器應用程序的資源 在這種情況下,您需要Bearer Token身份驗證類型和您的訪問令牌:

curl -X GET http://localhost:8080/demo \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImV4cCI6MTU0Nzc2NDIzOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiYzk1YzkzYTAtMThmOC00OGZjLWEzZGUtNWVmY2Y1YWIxMGE5IiwiY2xpZW50X2lkIjoiY2xpZW50In0.RWSGMC0w8tNafT28i2GLTnPnIiXfAlCdydEsNNZK-Lw'

3)要刷新令牌,您必須再次使用帶有客戶端憑據的Basic Auth,但在這種情況下,您需要'refresh_token'作為grant_type

curl --user client:secret \
  -X POST http://localhost:8080/oauth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'grant_type=refresh_token&scope=*&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2VtYWlsIjoidXNlckBtYWlsLmNvbSIsInVzZXJfbmFtZSI6InVzZXIiLCJzY29wZSI6WyIqIl0sImF0aSI6ImM5NWM5M2EwLTE4ZjgtNDhmYy1hM2RlLTVlZmNmNWFiMTBhOSIsImV4cCI6MTU0Nzc2NzcxOCwiYXV0aG9yaXRpZXMiOlsiQURNSU4iXSwianRpIjoiZDRhNGU2ZjUtNDY2Mi00NGZkLWI0ZDgtZWE5OWRkMDJkYWI2IiwiY2xpZW50X2lkIjoiY2xpZW50In0.m7XvxwuPiTnPaQXAptLfi3CxN3imfQCVKyjmMCIPAVM'

每次訪問令牌到期時,您都必須使用第3個請求刷新它。 然后,您將能夠再次訪問資源。

附加信息

1)我的答案是如何使用JWT和自定義聲明構建簡單的OAuth2應用程序

2) 相關演示應用程序

3) 相關郵遞員收藏

OAuth 2.0規范描述了客戶端應用程序獲取訪問令牌(表示用戶對客戶端訪問其數據的權限)的許多授權(“方法”)。

Spring OAuth2預定義授權類型:

  • ClientCredentialsTokenGranter
  • RefreshTokenGranter
  • AuthorizationCodeTokenGranter
  • ImplicitTokenGranter
  • ResourceOwnerPasswordTokenGranter(它的密碼授權類型,例如你使用的那個)

如果要更改令牌獲取邏輯,可以使用自定義TokenGranter

額外:

OAuth 2 Develpers指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM