https://www.jhipster.tech/using-uaa/
https://www.baeldung.com/jhipster-uaa-secured-micro-service
JHipster UAA介紹
前面我們介紹的JHipster Registry解決了服務注冊與發現以及配置中心的問題。而這個UAA則是為了解決授權問題。
它主要上做了2件事
- 它提供了使用者管理的服務,實際上uaa預設生成一個user表,并提供了user的增删查改服務。當然,如果對它對使用者管理不滿意,就可以在uaa項目的基礎上做開發
- 它提供了token生成和token校驗的功能
UAA部署
- 建立一個
檔案夾uaa
- 進入
檔案夾,執行uaa
指令jhipster
- 通過問答選擇生成
項目,這裡不細說,問答很簡單基本一看就會uaa
- 運作
./mvnw
為驗證uaa是否啟動成功,可以執行以下指令:
$ curl -X POST --data \
"username=user&password=user&grant_type=password&scope=openid" \
http://web_app:[email protected]:9999/oauth/token
上面的指令,向
uaa
發送了幾個參數,主要是
username
和
password
,去擷取
token
不出意外,
uaa
會傳回如下資料,這就代表
uaa
啟動成功了
{
"access_token" : "eyJh...(token omitted)",
"token_type" : "bearer",
"refresh_token" : "eyJ...(token omitted)",
"expires_in" : 299,
"scope" : "openid",
"iat" : 1539650162,
"jti" : "8066ab12-6e5e-4330-82d5-f51df16cd70f"
}
注意:
- 傳回裡最重要的是
和access_token
refresh_token
- 通過傳回我們知道,這個
的過期時間隻有5分鐘(300秒),可以設定uaa的配置檔案裡的token
值來改變uaa.web-client-configuration.access-token-validity-in-seconds
過期時間token
UAA的使用
現在我們拿到了access_token,使用它來發送一個簡單調用
$ curl -H "Authorization: Bearer eyJh...(access token omitted)" \
http://localhost:9999/api/account
這個請求,是向uaa發送一個請求,檢視賬戶資訊
重點關注
Authorization: Bearer eyJh...(access token omitted)
,這是向請求頭裡加入了一個鍵值對
-
key
:
Authorization
-
value
:
Bearer token(這個token就是上面/oauth/token請求傳回給我們的access_token)
正常情況下,uaa會傳回目前token所屬使用者的資訊:
{
"id" : 4,
"login" : "user",
"firstName" : "User",
"lastName" : "User",
"email" : "[email protected]",
"imageUrl" : "",
"activated" : true,
"langKey" : "en",
"createdBy" : "system",
"createdDate" : "2018-10-14T17:07:01.336Z",
"lastModifiedBy" : "system",
"lastModifiedDate" : null,
"authorities" : [ "ROLE_USER" ]
}
通過以上調用,我們可初步了解uaa的工作原理:
- 任何請求都需要在請求頭中加入
以供access_token
校驗,否則請求會被拒絕uaa
-
有過期時間,過期後不需要再通過使用者名密碼去擷取access_token
,而是通過token
去更新refresh_token
access_token
雖然到目前為止,我們已經擁有了registry和uaa,但是還需要解決2個問題
- 通過前端通路後端資源
- 微服務間互相調用
是以下一步我們會使用JHipster Gateway來實作前端通路背景