簡體   English   中英

如何使用 oauth2 靜默登錄用戶?

[英]How to login an user silently with oauth2?

我正在為預訂平台構建一個網絡應用程序,我正在使用 oauth2 來使用他們的API並驗證用戶。 我的應用程序嵌入在此處名為“X”的其他網站中,我無法控制。 當用戶單擊我的應用程序時,它會在 iframe 中加載https://localhost/?_account_id=12 ,其中_account_id=12是它自己在 X 網站中的帳戶 ID。

  • 我正在使用 oauth2授權代碼流,以便用戶批准我的應用程序。
  • 我正在安全地存儲授權服務器提供的刷新令牌。
  • 我在會話中存儲account_id參數。
  • 授權服務器不支持著名的prompt=none
  • 這是我第一次使用 oauth2,所以也許我沒有正確理解 oauth2 的工作原理。

由於_account_id安全考慮,我不能只依賴_account_id參數,因此每次連接到我的應用程序時,我都需要對用戶進行身份驗證。 這樣做,每次會話到期時,應用程序都會提示用戶批准我的應用程序。

對於 X 中可用的其他應用程序,我從未被提示重新批准這些應用程序。 所以在分析它們時,我瀏覽器的網絡開發工具每次連接到其他應用程序時都會列出這個:

204 https://other_app_provider/fr/admin?_account_id=12

302 https://other_app_provider/auth/?_account_id=12

302 https://authorization_server/oauth/authorize?_account_id=12&client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&response_type=code&scope={SCOPES}&state={STATE}

302 https://other_app_provider/auth/bookingsync/callback?code={CODE}&state={STATE}

200 https://other_app_provider/admin

我再說一遍,授權和回調之間沒有批准屏幕。

我的問題:如何使用授權代碼流隱式流靜默驗證用戶? 換句話說,如何模仿上述行為?

謝謝你的回答!

我可以先問幾個問題 - 看看我是否理解這個場景:

  • 用戶是否先登錄主機應用程序 X,然后您的應用程序作為插件加載?

  • 這是不同公司構建主機和插件的聯合方案嗎?

  • 主機和插件是否使用相同的授權服務器,或者它們是具有不同用戶憑據的不同登錄系統。

避免同意提示可能就像在授權服務器中的應用程序的 OAuth 客戶端條目中關閉此設置一樣簡單

值得注意的是,iframe 中的 OAuth 登錄經常因點擊劫持問題而被阻止,更可靠的選擇是使用彈出窗口進行插件登錄。

在某些情況下,很難或不可能實現使解決方案感覺像單個集成 UI 的所需行為 - 但您的需求變得非常普遍。

我找到了解決方案:

X 授權服務器中有一個選項account_id沒有很好地記錄:

預先選擇要授權的帳戶

在調用您的管理 URL 時,我們傳遞參數_account_id 該參數的值可以在授權過程中作為account_id參數使用。 這樣做將在使用授權代碼流或隱式流時預先選擇要授權的帳戶。

所以我可以通過在授權 url 中傳遞account_id參數來模仿問題中描述的行為。

現在,我通過以下方式理解“預選”一詞:

檢查帳戶所有者是否已連接到主機應用程序,選擇其帳戶並在應用程序中靜默驗證帳戶所有者(如果它是已批准的帳戶)。

如果我在網絡開發者工具里沒有看到,那是因為它們是由X提供的,所以也許X使用cookie/session來預選賬戶進行授權。 我必須安裝第三方應用程序才能看到授權 url 中的account_id參數。

謝謝您的回答 !

暫無
暫無

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

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