1

我想了解如何OAuth2.0隱式流(與OIDC)與一個非常簡單的SPA /移動客戶端(又名客戶端)和我的REST Api(又名資源服務器)&創建新帳戶在SPA中使用隱式流程時,我們在哪裏實際創建了數據庫中的帳戶?

我或多或少地瞭解客戶端如何從Auth服務(Auth0/Stormpath/IdentityServer/etc)請求令牌。然後它使用此令牌訪問受限制的API端點。太棒了!

我繼續閱讀

但是,所有的例子都是「帳戶」這些驗證服務被創造出來(這是必要的,我有完全KEWL),但服務(我的資源服務器)上創建什麼。

我需要在我的數據庫中創建一個帳戶,因爲我有我希望存儲的用戶數據/設置(例如他們的訂單等)。當然,我不要想要存儲任何安全信息..因此,這就是爲什麼我使用外部身份驗證服務。

那麼,任何人都可以解釋他們如何使用隱式流和...當一個令牌(或更具體地說,當使用OpenID Connect獲取用戶信息時)被返回時,您會發現用戶是否存在並創建一個如果是新的。

我也很好奇,從驗證服務的角度來看,需要令牌issuer_id + sub來確定unique用戶。

最後,你如何防止「新帳戶垃圾郵件/濫用」?我假設您的客戶端(在每個Rest API請求之前檢查本地存儲令牌,因爲我們需要在bearer標頭中插入一些令牌)......當您決定創建新用戶時。 ..我的REST Api(又名資源服務器)將有一個端點來創建新用戶..就像POST /account/ ..那麼如何保護您的服務器免遭垃圾郵件的新隨機POST創建新帳戶? IP +延時限制?

乾杯!

回答

1

我們在哪裏實際創建我們的數據庫中的帳戶?

創建一個包含isssub列的數據庫表。將這些列設置爲表示用戶的唯一複合鍵。在那裏插入用戶帳戶。

所以,任何人都可以解釋他們是如何使用隱流和..返回一個令牌(或更具體地說,當ID連接用於獲取用戶信息)時,你計算出用戶是否存在或不併創建一個,如果它是新的?

這聽起來像你已經知道答案。

  1. 解析id_token
  2. 檢索isssub
  3. 檢查您的應用程序的表iss + sub鍵。
  4. 如果存在,那麼該用戶存在。如果不是,則創建用戶。

從規格:

主題標識符:本地唯一性和從未重新分配標識符發行人內的最終用戶,其目的是由客戶消耗。

https://openid.net/specs/openid-connect-core-1_0.html

isssub充當代表該用戶的唯一化合物密鑰。這裏是一個例子id_token

{ 
alg: "RS256", 
kid: "1e9gdk7" 
}. 
{ 
iss: "http://server.example.com", 
sub: "248289761001", 
aud: "s6BhdRkqt3", 
nonce: "n-0S6_WzA2Mj", 
exp: 1311281970, 
iat: 1311280970 
}. 
[signature] 

對待你像對待其他任何唯一用戶標識相同的方式iss + sub複合鍵。

那麼如何保護您的服務器免遭spam'd新的隨機POST創建新賬戶?

設置跨源資源共享(CORS)限制,以便只允許您的SPA的域POST到/api/account端點。

+1

好極了!所以,當我得到令牌時,我需要點擊我們的API來檢查是否需要創建用戶或者只是使用現有的用戶。另外,我可以使用CORS限制(白名單?)來保護該端點。 –

相關問題