能否在沒有重定向伺服器的情況下使用OAuth 2.0?
P粉710478990
P粉710478990 2023-08-22 22:18:09
0
2
667
<p>我正在嘗試建立一個基於Java的本機客戶端,與SurveyMonkey API進行互動。 </p> <p>SurveyMonkey要求使用OAuth 2.0產生長期有效的存取令牌,這是我不太熟悉的。 </p> <p>我已經在Google上搜尋了幾個小時,我認為答案是否定的,但我只是想確保一下:</p> <p>我是否可以寫一個簡單的Java客戶端與SurveyMonkey進行交互,<strong>而無需在某個雲端設定自己的重定向伺服器</strong>? </p> <p>我覺得擁有自己的線上服務是必要的,才能夠接收由OAuth 2.0產生的令牌。難道我不能讓SurveyMonkey直接將令牌傳送給我的客戶端嗎? </p> <p>如果我在某個地方設定了自己的自訂Servlet,並將其用作redirect_uri,那麼正確的流程應該如下:</p> <ol> <li>Java客戶端向SurveyMonkey請求令牌,其中redirect_uri是我的自訂Servlet的URL。 </li> <li>SurveyMonkey將令牌發送到我的自訂Servlet的URL。 </li> <li>Java客戶端輪詢自訂Servlet的URL,直到取得令牌。 </li> </ol> <p>這樣正確嗎? </p>
P粉710478990
P粉710478990

全部回覆(2)
P粉949190972

是的,可以在沒有回呼URL的情況下使用OAuth2。 RFC6749介紹了幾個流程。隱式流程(現已棄用[1])和授權碼流程(Authorization Code)需要重定向URI。然而,資源擁有者密碼憑證流程(也已棄用[1])不需要。

自RFC6749發布以來,也發布了其他規範,這些規範不需要任何重定向URI:

此外,使用OpenID Connect時,回應模式不一定是重定向到redirect_uri參數,而可以是對該端點的POST請求。有關詳細信息,請參閱OAuth 2.0表單POST回應模式規格。

無論如何,如果上述授權類型不適合您的需求,您可以建立一個自訂授權類型


[1]:OAuth 2.1規範(草案07)

P粉713866425

並不完全準確,OAuth流程的整個重點在於使用者(你代表其存取資料的客戶端)需要給予你存取他們資料的權限。

請參閱身份驗證說明。你需要將使用者傳送到OAuth授權頁面:

https://api.surveymonkey.net/oauth/authorize?api_key<your_key>&client_id=<your_client_id>&response_type=code&redirect_uri=<your_redirect_uri>

這將向使用者顯示一個頁面,告訴他們你正在要求存取他們帳戶的哪些部分(例如查看他們的調查、查看他們的回答等)。一旦使用者透過在該頁面上點擊「授權」來批准,SurveyMonkey將自動跳到你設定為重定向URI的頁面(確保上述URL中的重定向URI與你應用程式設定中設定的相符)並返回授權碼。

因此,如果你的重定向URL是https://example.com/surveymonkey/oauth,SurveyMonkey將使用授權碼將使用者重定向到該URL:

https://example.com/surveymonkey/oauth?code=<auth_code>

#

然後,你需要使用該授權碼透過向https://api.surveymonkey.net/oauth/token?api_key=<your_api_key>發送POST請求來交換存取權杖,並提供以下POST參數:

client_secret=<your_secret>
code=<auth_code_you_just_got>
redirect_uri=<same_redirect_uri_as_before>
grant_type=authorization_code

這將傳回一個存取令牌,然後你可以使用該存取令牌來存取使用者帳戶上的資料。你不需要將存取權杖提供給用戶,它是供你使用以存取用戶帳戶的。無需輪詢或其他操作。

如果你只是存取自己的帳戶,可以使用應用程式設定頁面提供的存取權杖。否則,除非設定自己的重定向伺服器,否則無法為使用者取得存取權杖(除非所有使用者都屬於同一組,即同一帳戶下的多個使用者;但我不會深入討論這個)。 SurveyMonkey需要一個地方來發送授權碼給你,你不能只是請求一個。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板