以前に
GoogleAuthUtil.getToken
または Plus.API
の場合は、最新のバージョンに移行する必要があります
セキュリティとユーザー エクスペリエンスを向上させる Sign-In API。
アクセス トークンのアンチパターンから移行する
GoogleAuthUtil.getToken
で取得したアクセス トークンを
バックエンド サーバーを ID アサーションとして使用することはできません。これは、
トークンがバックエンドに発行されたことを認識し、挿入に対して脆弱な状態を
認証情報を取得できます。
たとえば、下記の例のような Android コードの場合、 アプリを現在のベスト プラクティスに移行する。
この例では、アクセス トークン リクエストで oauth2:
とスコープ文字列が値として
GoogleAuthUtil.getToken
呼び出しの scope
パラメータ
(oauth2:https://www.googleapis.com/auth/plus.login
)。
認証には、Google Cloud API で取得したアクセス トークン
GoogleAuthUtil.getToken
の場合は、ID トークンフローまたは認証コードフローを使用します。
ID トークンのフローに移行する
ユーザーの ID、メールアドレス、名前、プロフィール写真の URL があれば十分です。 ID トークンのフローを使用します。
ID トークンのフローに移行するには、次の変更を行います。
Android クライアントサイド
- リクエストする場合は、
GET_ACCOUNTS
(連絡先)権限を削除する GoogleAuthUtil
、Plus.API
、AccountPicker.newChooseAccountIntent()
、またはAccountManager.newChooseAccountIntent()
からAuth.GOOGLE_SIGN_IN_API
に変更:GoogleSignInOptions.Builder.requestIdToken(...)
の構成。
サーバーサイド
- ID トークン認証用の新しいエンドポイントを作成します。
- クライアント アプリの移行後に古いエンドポイントをオフにする
サーバー認証コードフローに移行する
サーバーが他の Google API(Google ドライブ、YouTube、 サーバー認証コードフローを使用します。
サーバー認証コードフローに移行するには、次の変更を行います。
Android クライアントサイド
- リクエストする場合は、
GET_ACCOUNTS
(連絡先)権限を削除する GoogleAuthUtil
、Plus.API
、AccountPicker.newChooseAccountIntent()
、またはAccountManager.newChooseAccountIntent()
からAuth.GOOGLE_SIGN_IN_API
に変更:GoogleSignInOptions.Builder.requestServerAuthCode(...)
の構成。
サーバーサイド
- サーバー認証コードフロー用の新しいエンドポイントを作成する
- クライアント アプリの移行後に古いエンドポイントをオフにする
引き続き、古いエンドポイントと新しいエンドポイントの間で API アクセス ロジックを共有できます。次に例を示します。
GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(...); String accessToken = tokenResponse.getAccessToken(); String refreshToken = tokenResponse.getRefreshToken(); Long expiresInSeconds = tokenResponse.getExpiresInSeconds(); // Shared by your old and new implementation, old endpoint can pass null for refreshToken private void driveAccess(String refreshToken, String accessToken, Long expiresInSeconds) { GoogleCredential credential = new GoogleCredential.Builder() .setTransPort(...) ... .build(); credential.setAccessToken(accessToken); credential.setExpiresInSeconds(expiresInSeconds); credential.setRefreshToken(refreshToken); }
GoogleAuthUtil ID トークンのフローから移行する
GoogleAuthUtil
を使用して ID トークンを取得する場合は、新しい
Sign-In API の ID トークンフロー。
たとえば、Android コードが次の例のような場合、 migrate:
この例では、ID トークン リクエストで audience:server:client_id
と
「scope」パラメータとして、ウェブサーバーのクライアント ID を
GoogleAuthUtil.getToken
件の通話
(audience:server:client_id:9414861317621.apps.googleusercontent.com
)。
新しい Sign-In API ID トークンのフローには、次のようなメリットがあります。
- 合理化されたワンタップ ログイン エクスペリエンス
- 追加のネットワーク呼び出しを行わなくても、サーバーがユーザー プロフィール情報を取得できる
ID トークンのフローに移行するには、次の変更を行います。
Android クライアントサイド
- リクエストする場合は、
GET_ACCOUNTS
(連絡先)権限を削除する GoogleAuthUtil
、Plus.API
、AccountPicker.newChooseAccountIntent()
、またはAccountManager.newChooseAccountIntent()
からAuth.GOOGLE_SIGN_IN_API
に変更:GoogleSignInOptions.Builder.requestIdToken(...)
の構成。
サーバーサイド
新しい Sign-In API は、OpenID Connect に準拠した ID トークンを発行します。
非推奨の形式を使用する GoogleAuthUtil.getToken
とは異なります。
具体的には、発行者は現在 https://accounts.google.com
で、https
になっています。
説明します。
移行プロセス中に、サーバーは両方の ID トークンを検証する必要があります。 更新することもできます。両方の形式のトークンを検証するには、 (使用しているクライアント ライブラリに応じて)変更する方法を説明します。
- Java(Google API クライアント ライブラリ): 1.21.0 以降にアップグレード
- PHP(Google API クライアント ライブラリ): v1 を使用している場合は、1.1.6 以降にアップグレードします。 v2 を使用している場合は、2.0.0-RC1 以降にアップグレードしてください
- Node.js: 0.9.7 以降にアップグレードする
- Python または独自の実装: 次の両方の発行元を受け入れます。
https://accounts.google.com
およびaccounts.google.com
GoogleAuthUtil サーバー認証コードフローから移行する
GoogleAuthUtil
を使用してサーバー認証コードを取得する場合は、
新しい Sign-In API 認証コードフローを導入しました。
たとえば、Android コードが次の例のような場合、 migrate:
この例では、サーバーの認証コード リクエストには、oauth2:server:client_id
と
クライアント ID をウェブサーバーの scope
パラメータとして
GoogleAuthUtil.getToken
件の通話(oauth2:server:client_id:9414861317621.apps.googleusercontent.com
)。
新しい Sign-In API 認可コードフローには、次のような利点があります。
- 合理化されたワンタップ ログイン エクスペリエンス
- 以下の移行ガイドに沿って操作すると、サーバーは ID トークンを取得できます (認証コードの交換を行う際、ユーザーのプロフィール情報を含む)
新しい認証コードフローに移行するには、次の変更を行います。
Android クライアントサイド
- リクエストする場合は、
GET_ACCOUNTS
(連絡先)権限を削除する GoogleAuthUtil
、Plus.API
、AccountPicker.newChooseAccountIntent()
、またはAccountManager.newChooseAccountIntent()
からAuth.GOOGLE_SIGN_IN_API
に変更:GoogleSignInOptions.Builder.requestServerAuthCode(...)
の構成。
サーバーサイド
現在のコードを維持し、https://oauth2.googleapis.com/token
を指定する
トークン サーバーのエンドポイントとして、
GoogleAuthorizationCodeTokenRequest
オブジェクトを使用して ID トークンを取得できるようにする
ユーザーのメール、ユーザー ID、プロフィール情報が自動的に設定されます。別の認証情報を入力する必要はありません。
通信できます。このエンドポイントには完全な下位互換性があります。次のコードは、
以前の Android デバイスと新しい Android デバイスの両方から取得したサーバー認証コードで使用できます。
実装します。
GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest( transport, jsonFactory, // Use below for tokenServerEncodedUrl parameter "https://oauth2.googleapis.com/token", clientSecrets.getDetails().getClientId(), clientSecrets.getDetails().getClientSecret(), authCode, REDIRECT_URI) .execute(); ... // You can also get an ID token from auth code exchange. GoogleIdToken googleIdToken = tokenResponse.parseIdToken(); GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory) .setAudience(Arrays.asList(SERVER_CLIENT_ID)) .setIssuer("https://accounts.google.com") .build(); // Refer to ID token documentation to see how to get data from idToken object. GoogleIdToken idToken = verifier.verify(idTokenString); ...