簡體   English   中英

微服務 - 如何使用授權服務器和資源服務器建立注冊流的建模?

[英]Microservices - How to model a register flow with Authorization Server and Resource Server?

我正在使用Java和Spring Boot來實現微服務生態系統。

我有3個邏輯邊界:

  • 葯品(資源服務器)
  • 預約(資源服務器)
  • 身份聯合(授權服務器)

用戶的登錄信息(用戶名,密碼,角色等)進入Identity Federation 用戶的個人信息(名字,姓氏,地址,聯系媒介,性別等)進入Appointments Microservice。

現在,想象一下在我的Appointments Resource Server我暴露了以下資源的情況:

  • GET /doctors/{id} - 使用傳遞的id返回有關Doctor的個人信息

在我的Identity Federation Authorization Server我有以下內容:

  • POST /oauth/token - 返回令牌的資源。

現在,假設我在授權服務器上POST/oauth/token ,並且我得到了身份驗證並收到了令牌。

好的,現在,我可以使用此令牌與資源服務器進行事務。

如果我向/doctor/1發送GET ,我的令牌會被解析,我可以讀取它的所有聲明。 角色,用戶ID,用戶名等。

id = 1的醫生不應該能夠看到其他醫生的個人信息(例如:id = 4的醫生)。

因此,當請求到達/doctors/1 ,我需要檢查令牌上的id是否與請求的相同。

在Spring中,會是這樣的:

@GetMapping("/doctors/{id}")
@PreAuthorize("#id == authentication.doctorId")
public ResponseEntity<Object> handleGetDoctorsInformations(@PathVariable("id") Long id) {
    // logic and return
}

但是為了能夠做到這一點,我需要同步兩個微服務(約會資源服務器和身份聯合授權服務器)上的ID。

我不能使用自然密鑰,因為我有三種類型的用戶(Doctor只是其中之一)可以登錄,而自然密鑰對兩者都不同。

所以,id需要在某個地方生成。 我不確定哪種方式最好。

我們的團隊討論過的內容:

流

基本上:

  1. 具有整個Doctor JSON有效負載的授權服務器的前端POST (包含個人信息和登錄信息)。
  2. 授權服務器創建一個生成其唯一ID的帳戶。
  3. Authorization Server使用生成的id遞增JSON有效內容,然后將JSON發布到Queue。
  4. 資源服務器偵聽隊列,獲取JSON並在他身邊創建Doctor,存儲Doctor個人信息。

這是一個不好的方法嗎?

在這種特定情況下,您不需要實現具有額外復雜性的隊列,只需驗證特定醫生的特殊權限(此處,閱讀其他醫生數據)。 相反,您可以生成JWT令牌並在toke的有效負載上嵌入特定的權限,如'READ_DOCTORS_INFO'。 然后,管理醫生信息的資源服務器可以驗證提供的令牌,並允許特定用戶,具體取決於JWT令牌上嵌入的權限。

暫無
暫無

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

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