天天看點

JHipster學習記錄 - 2 JHipster UAAJHipster UAA介紹UAA部署UAA的使用

https://www.jhipster.tech/using-uaa/

https://www.baeldung.com/jhipster-uaa-secured-micro-service

JHipster UAA介紹

前面我們介紹的JHipster Registry解決了服務注冊與發現以及配置中心的問題。而這個UAA則是為了解決授權問題。

它主要上做了2件事

  1. 它提供了使用者管理的服務,實際上uaa預設生成一個user表,并提供了user的增删查改服務。當然,如果對它對使用者管理不滿意,就可以在uaa項目的基礎上做開發
  2. 它提供了token生成和token校驗的功能

UAA部署

  1. 建立一個

    uaa

    檔案夾
  2. 進入

    uaa

    檔案夾,執行

    jhipster

    指令
  3. 通過問答選擇生成

    uaa

    項目,這裡不細說,問答很簡單基本一看就會
  4. 運作

    ./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"
}
           

注意:

  1. 傳回裡最重要的是

    access_token

    refresh_token

  2. 通過傳回我們知道,這個

    token

    的過期時間隻有5分鐘(300秒),可以設定uaa的配置檔案裡的

    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個問題

  1. 通過前端通路後端資源
  2. 微服務間互相調用

是以下一步我們會使用JHipster Gateway來實作前端通路背景