[英]How to login an user silently with oauth2?
我正在為預訂平台構建一個網絡應用程序,我正在使用 oauth2 來使用他們的API並驗證用戶。 我的應用程序嵌入在此處名為“X”的其他網站中,我無法控制。 當用戶單擊我的應用程序時,它會在 iframe 中加載https://localhost/?_account_id=12
,其中_account_id=12
是它自己在 X 網站中的帳戶 ID。
account_id
參數。prompt=none
。 由於_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.