能否在沒有重定向伺服器的情況下使用OAuth 2.0?
P粉710478990
P粉710478990 2023-08-22 22:18:09
0
2
509

我正在嘗試建立一個基於Java的本機客戶端,與SurveyMonkey API進行互動。

SurveyMonkey要求使用OAuth 2.0產生長期有效的存取令牌,這是我不太熟悉的。

我已經在Google上搜尋了幾個小時,我認為答案是否定的,但我只是想確保一下:

我是否可以寫一個簡單的Java客戶端與SurveyMonkey進行交互,而無需在某個雲端設定自己的重定向伺服器

我覺得擁有自己的線上服務是必要的,才能夠接收由OAuth 2.0產生的令牌。難道我不能讓SurveyMonkey直接將令牌傳送給我的客戶端嗎?

如果我在某個地方設定了自己的自訂Servlet,並將其用作redirect_uri,那麼正確的流程應該如下:

  1. Java客戶端向SurveyMonkey請求令牌,其中redirect_uri是我的自訂Servlet的URL。
  2. SurveyMonkey將令牌發送到我的自訂Servlet的URL。
  3. Java客戶端輪詢自訂Servlet的URL,直到取得令牌。

這樣正確嗎?

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&client_id=&response_type=code&redirect_uri=

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

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

    https://example.com/surveymonkey/oauth?code=

    #

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

    client_secret= code= redirect_uri= grant_type=authorization_code

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

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

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!