簡體   English   中英

使用OAuth的用戶身份驗證/登錄

[英]User Authentication/Login using OAuth

我覺得這里的另一個OAuth問題可能會回答這個問題,但是我找不到它...

我已經在編寫的Web服務上實現了OAuth提供程序。 我提供者的OAuth使用者(“應用程序”)具有使用者密鑰,並以典型的OAuth方式獲取用戶訪問令牌(獲取請求令牌,重定向到我的生產者以使用戶授權,獲取訪問令牌,進行存儲等) 。 這一切都很好。

我的問題是有關這些OAuth使用者如何使用我的應用程序的登錄憑據在訪問他們時對某人進行身份驗證。 基本上,當有人訪問消費者應用程序時,我希望:

  1. 用戶單擊消費者網站上的登錄名。
  2. 用戶被重定向到我的應用程序並顯示了一個登錄表單。
  3. 登錄后,我的應用程序(OAuth提供程序)意識到該用戶已經授權了該使用者,並將其重定向回該使用者。
  4. 在此請求中,以某種方式告知消費者該用戶的用戶名(或訪問令牌)。

這類似於典型的OAuth流,不同之處在於OAuth使用者不需要將授權請求令牌交換為訪問令牌。 取而代之的是,一旦用戶通過了身份驗證,消費者現在就知道哪個用戶已通過身份驗證,並且可以立即使用他們已經存儲的已存儲令牌/秘密開始發出請求。

實施此操作時需要考慮哪些安全條件? 甚至可以安全地實施嗎? 天真地,這可以通過使生產者使用用戶名(或其他唯一的)將一些GET參數返回給消費者回調來實現。 但是,攻擊者可以通過使用要攻擊的用戶的用戶名向使用者的回調發起請求,從而利用此漏洞。

有什么想法嗎? 這是我要重新發明並重新實現的已解決問題嗎? 我的平台是Java,如果有已經完成所有這些工作的庫。 謝謝!

您的問題是(3):

“登錄后,我的應用程序(OAuth提供者)意識到該用戶已經授權了該使用者,並將其重定向回該使用者。”

您的OAuth提供者無法意識到該用戶已經過身份驗證/授權,因為您的應用未完成授權。 您的應用程序應確定誰進行了身份驗證,誰沒有進行身份驗證,以及他的授權用途。 這就是OAuth的全部思想。

如果要實現OAuth提供者,即“知道”使用方進行身份驗證的人,那么使用方必須向您的提供方發送內容,然后在使用方(OAuth客戶端)和您的應用(OAuth提供方)之間建立耦合。

OAuth SPEC完全定義了OAuth的通用接口,因此,如果您堅持使用它,則應避免向提供程序發送額外的數據,這樣它就不會耦合到特定的客戶端。

暫無
暫無

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

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