簡體   English   中英

OpenID Connect,oAuth2-從哪里開始?

[英]OpenID Connect, oAuth2 - Where to start?

我不確定在實施過程中應該采用哪種方法,是否需要一些指導。

我有一個Yii2框架(PHP)內置的REST API(api.mysite.com),可從mysite.com(數據庫)訪問數據。 在mysite.com上,我們的用戶將能夠創建將提供客戶ID +機密的關聯應用-授予對其帳戶的訪問權限(全部權限?)。

根據我的研究,下一步似乎是設置一些東西來實際提供要傳遞給api的承載令牌-我一直傾向於使用oAuth2,但隨后我看到oAuth2不提供身份驗證。 基於此,我想需要OpenID Connect才能提供用戶令牌,因為我的API需要根據用戶上下文限制數據。

通過這種方式,據我了解,我需要擁有一個身份驗證服務器-幾個問題:

  • 我可以安裝用作OpenID Connect / oAuth2身份驗證服務器的軟件嗎?

  • 是否有將用作OpenID Connect / oAuth2身份驗證服務器的特定Amazon Web Services?

  • 我假設流程將是:App向具有客戶端ID +機密的身份驗證服務器發出請求,並接收訪問令牌。 訪問令牌可用於進行API調用。 這些令牌存儲在哪里(我假設一個特定於我正在使用的服務/軟件的數據庫?)

  • 進行API調用時,我會傳遞承載令牌和用戶令牌嗎?

非常感謝任何見解。

您的理解與現實相差不遠。 假設您有兩台服務器用於身份驗證,這台服務器負責根據Authorization Basic和base64編碼的CLientID / ClientSecret組合生成令牌。 這基本上是應用程序認證。 如果您還想添加用戶數據,只需在帖子正文中傳遞用戶名/密碼,在服務器端進行身份驗證,然后向令牌中添加更多數據,例如用戶名,聲明,角色等。

您可以控制這些令牌中的內容,如果使用JWT之類的東西(Json Web令牌),則它們只是數據的json位。

那么您就擁有了一個資源服務器,並用授權載體和從授權服務器獲得的令牌對其進行了攻擊。

最初,令牌不會存儲在任何地方,而是在您控制的一段時間內發行。 但是,如果您確實願意,可以執行其他操作,並將它們存儲在數據庫中。 即使到期,即使有人把手放在他們的身上,到期也要安全得多! 就我而言,我花了30分鍾來確保令牌有效。

現在,您尚未指定要使用的語言/框架。 如果您使用點網之類的東西,請查看IdentityServer,版本4適用於點網核心,版本3適用於以下內容。

如果您對此感興趣,我也有一篇很長的文章:

https://eidand.com/2015/03/28/authorization-system-with-owin-web-api-json-web-tokens/

希望所有這些可以澄清您的一些問題。

-添加以回答評論中的問題。

令牌包含它們需要由資源服務器正確驗證的所有信息,因此您無需將其存儲在數據庫中。 正如我已經說過的,您可以存儲它們,但是在我看來,這會使它們的安全性降低。 不要忘記控制令牌中的內容,因此可以在需要時添加用戶名。

想象一下這種情況,您想在對授權服務器的同一調用中對應用程序和用戶進行身份驗證。 以標准方式執行OAuth2,這意味着首先根據客戶端ID /客戶端密碼對應用程序進行身份驗證。 如果通過了,則接下來進行用戶身份驗證。 將用戶名或用戶ID添加到您生成的令牌以及所需的其他信息中。 這意味着資源服務器可以安全地假定令牌中傳遞給它的用戶名已由身份驗證服務器驗證,否則首先不會生成令牌。

我寧願將這兩部分分開保存,這意味着讓AS(授權服務器)處理應用程序級別的安全性。 然后在RS(資源服務器)端,您有一個諸如ValidateUser之類的端點,它負責用戶驗證,之后您可以執行所需的任何操作。 選擇我認為適合您的項目的任何一種。

最后一點,始終確保您的所有api調用(實際上AS和RS都只是api)都是通過HTTPS進行的,並且永遠不會通過GET調用傳輸任何重要信息,這意味着可以攔截URL。 標頭和POST正文均已加密,並通過HTTPS進行安全保護。

我相信,這應該解決您的兩個問題。

暫無
暫無

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

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