![](/img/trans.png)
[英]Spring Security 5.3.2 OAuth 2, Resource Owner Password Credentials Flow - How to add additional HEADER parameters to authorization server uri
[英]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需要在某個地方生成。 我不確定哪種方式最好。
我們的團隊討論過的內容:
基本上:
POST
(包含個人信息和登錄信息)。 這是一個不好的方法嗎?
在這種特定情況下,您不需要實現具有額外復雜性的隊列,只需驗證特定醫生的特殊權限(此處,閱讀其他醫生數據)。 相反,您可以生成JWT令牌並在toke的有效負載上嵌入特定的權限,如'READ_DOCTORS_INFO'。 然后,管理醫生信息的資源服務器可以驗證提供的令牌,並允許特定用戶,具體取決於JWT令牌上嵌入的權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.