我試圖將從客戶端應用程序獲得的OAuth一次性代碼換成訪問令牌並刷新服務器上的令牌。我得到的迴應是:Google OAuth 2.0在獲取access_token時返回無效的redirect_uri_mismatch
{
"error" : "redirect_uri_mismatch"
}
我的POST請求是:
POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded
code={My Code}&
client_id={My Client ID}&
client_secret={My Client Secret}&
grant_type=authorization_code
我檢查我的客戶ID和客戶端密鑰對那些在API控制檯和它們相匹配。
我得到的一次性使用的代碼我的客戶與下面的Java代碼:
static final List<String> SCOPES = Arrays.asList(new String[]{"https://www.googleapis.com/auth/plus.login","https://www.googleapis.com/auth/userinfo.email"});
String scope = String.format("oauth2:server:client_id:%s:api_scope:%s", SERVER_CLIENT_ID, TextUtils.join(" ", SCOPES));
final String token = GoogleAuthUtil.getToken(c, email, scope);
我在API控制檯REDIRECT_URI,但因爲我想使用跨客戶端授權(如描述here),I特意留出來POST請求的作爲是必需的:
當交換爲令牌的代碼,它不應該包括在後「REDIRECT_URI」的說法。
對我在做什麼有任何想法是錯誤的?
你在服務器端使用的是什麼庫?我的猜測是庫類需要設置redirect_uri,如果你忽略它,那麼它會發送一些默認值。如果您明確設置了一個空值,請發送該值,但在OAuth 2端點上空值與完全沒有參數完全相同。 – mariuss
這是我錯過的最後一塊難題。謝謝@quantumwannabe。 –