ユーザーから認証を取得して認証コードを生成し、認証コードをアクセスおよび更新トークンと交換しようとするバックエンド Java サーブレットに送信する iOS アプリと Web アプリがあります。Web アプリからの認証コードの交換は機能していますが、ios アプリから生成された認証コードの場合、交換中に次のエラーが発生します。
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request { "error": "invalid_request", "error_description": "Missing parameter: redirect_uri" }
これは交換を行っているコードです
public OAuthCodeExchangeResponse exchangeAuthCode(String authCode, boolean isIosApp) throws JSONException, IOException {
OAuthCodeExchangeResponse response = new OAuthCodeExchangeResponse();
GoogleClientSecrets clientSecrets = getClientSecrets(isIosApp);
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setAccessType("offline")
.build();
GoogleTokenResponse tokenResponse = null;
if(isIosApp == false) {
tokenResponse = flow.newTokenRequest(authCode)
.setRedirectUri("postmessage")
.execute();
} else {
tokenResponse = flow.newTokenRequest(authCode).execute();
}
GoogleIdToken idToken = tokenResponse.parseIdToken();
GoogleIdToken.Payload payload = idToken.getPayload();
response.setAccessToken(tokenResponse.getAccessToken());
response.setEmail(payload.getEmail());
response.setIdToken(tokenResponse.getIdToken());
response.setRefreshToken(tokenResponse.getRefreshToken());
return response;
}
public GoogleClientSecrets getClientSecrets(boolean isIosApp) throws JSONException, IOException {
GoogleClientSecrets.Details d = new GoogleClientSecrets.Details();
if(isIosApp == false) {
d.setClientId(WebClientId);
d.setClientSecret(WebClientSecret);
} else {
d.setClientId(PhoneClientId);
}
GoogleClientSecrets clientSecrets = new GoogleClientSecrets();
clientSecrets.setInstalled(d);
return clientSecrets;
}
iOS アプリから生成された認証コードを交換するときに、どの redirect_uri を設定する必要がありますか? Google開発者コンソールでiOSアプリ用に作成された資格情報には、リダイレクトURIセットがありません.