[英]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預定義授權類型:
如果要更改令牌獲取邏輯,可以使用自定義TokenGranter 。
額外:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.