抱歉......我想完全改寫這個問題:,我問過同樣的問題現在談資訊安全
我正在開發的系統將有一個行動應用程式、一個網路入口網站和一個基於 HTTP 的 API。
我似乎找不到答案的問題:
我是否需要實作 openid connect 和/或 oauth 令牌端點並產生令牌供客戶端訪問我的API?或者我是否「以某種方式」允許客戶端使用用戶的開放 ID 提供者頒發的令牌存取 API?
更多背景:
我希望允許用戶能夠使用他們的 Google / Facebook ID 進行註冊和登入。
在 API 中,我儲存了一個包含一些屬性的使用者表,雖然數量很少,因為我不需要更多屬性,但本質上是:
表 users:
- uid
- real_name
- contact_number
- email_address
- is_active
- have_admin_rights
我也會為使用者的 open-ids 設定一個表,如下所示:
表 open_ids:
- uid
- user_id (參考 users(uid)
- open_id
(以便使用者可以使用他們想要與其帳戶關聯的任何 Open-ID)
在其他地方,我引用了使用者 ID,例如:
Table foo:
- uid
- bar
- bla
- last_modified_by_user_id (引用 users(uid))
目前,在我的測試設定中,我有一個「密碼」表,例如:
表密碼:
- uid
- user_id (引用用戶(uid))
- password_hash
(注意:我們的想法是盡快擺脫這個表並使用 open_id 代替。但是我選擇哪些庫很大程度上取決於我實現的功能以及我從外部來源使用的功能)
我認為我需要儲存存取令牌,因為我不想重複其社交服務設定檔中已有的用戶數據,並且需要不時為每個用戶存取這些服務。但是如何從客戶端(用戶註冊的位置)獲取存取令牌到 API(這是各個客戶端之間的共享資源)
問題並不是真正將令牌從客戶端發送到 API - 我可以在 API 中使用一個函數來「註冊」用戶和一些其他端點,以在用戶進行身份驗證時使用。問題是存取令牌僅適用於一個特定客戶端。
假設我沒有實現授權伺服器,並且以某種方式可以使用Google等的服務:在開發者網站上,例如Google、facebook,我可以註冊我的客戶端並獲得客戶端密碼/客戶端ID,但是我然後使用來自客戶端和 API 的相同客戶端憑證?
或者也許客戶端憑證僅由 API 保存,而前端服務依賴 API 作為使用者註冊時的中間步驟?這對於缺乏安全感來說是非常危險的。那麼,在 OpenID 供應商眼中,API 是另一個獨立的客戶嗎?
假設我確實需要實作授權伺服器,我是否還需要成為開放 ID 提供者?在這種情況下,它似乎必須是 openid-connect,因為我確實需要同時進行身份驗證和授權。但在這種情況下,我真的不知道如何執行新用戶註冊,而且先前的問題並沒有真正消失。看來我應該能夠讓客戶端連接並從 Open IdP 獲取用戶身份驗證/存取和 ID 令牌,然後使用 API「註冊」用戶。