Google 認証 API アクセス トークンを検証するにはどうすればよいですか? 質問する

Google 認証 API アクセス トークンを検証するにはどうすればよいですか? 質問する

Google 認証アクセス トークンを検証するにはどうすればよいですか?

何らかの方法でGoogleに問い合わせて、「[与えられたアクセストークン]は[[メールアドレス]] Googleアカウントですか?

短縮版

アクセストークンがどのように提供されるかは明らかです。Google 認証 API :: Web アプリケーション向け OAuth 認証その後、さまざまな Google サービスからデータをリクエストするために使用できます。特定のアクセス トークンが特定の Google アカウントに対して有効かどうかを確認する方法が明確ではありません。方法を知りたいです。

ロングバージョン

トークンベースの認証を使用するAPIを開発しています。有効なユーザー名とパスワードを入力するか、次のいずれかのサードパーティトークンを入力すると、トークンが返されます。いいえ検証可能なサービス。

サードパーティ サービスの 1 つは Google であり、ユーザーは Google アカウントを使用して私のサービスに対して認証できます。これは後で Yahoo アカウント、信頼できる OpenID プロバイダーなどにも拡張される予定です。

Google ベースのアクセスの概略例:

代替テキスト

「API」エンティティは私が完全に管理しています。「パブリック インターフェイス」エンティティは、Web ベースまたはデスクトップ ベースのアプリです。一部のパブリック インターフェイスは私が管理していますが、管理していないものや、私がまったく知らないものも存在します。

したがって、ステップ 3 で API に提供されたトークンを信頼することはできません。これは、対応する Google アカウントのメール アドレスとともに提供されます。

何らかの方法で Google に問い合わせて質問する必要があります。このアクセストークンは有効ですか?[メールアドレス]?

この場合、[メールアドレス]Google アカウントの一意の識別子です。これは、Google アカウントにログインするために使用するメール アドレスです。これは Gmail アドレスであると想定することはできません。Gmail アカウントを持っていなくても、Google アカウントを持つことができます。

Google のドキュメントには、アクセス トークンを使用して、さまざまな Google サービスからデータを取得する方法が明確に記載されています。ただし、特定のアクセス トークンが有効かどうかを確認する方法については何も記載されていないようです。

アップデートトークンは N 個の Google サービスで有効です。特定のユーザーが実際に使用する Google サービスのサブセットがわからないため、検証手段としてトークンを Google サービスに対して試すことはできません。

さらに、私は Google 認証アクセス トークンを Google サービスにアクセスするために使用することは決してありません。これは、Google ユーザーとされるユーザーが本当に本人であるかどうかを確認するための手段としてのみ使用します。これを行う別の方法があれば、喜んで試してみます。

ベストアンサー1

ユーザーチェックの場合は、アクセストークンをaccessTokenとして取得し、それを投稿して応答を取得します。

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=accessToken

ブラウザのアドレスバーでも試すことができます。また、Javaでもhttppostとレスポンスを使用できます。

応答は次のようになります

{
     "issued_to": "xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
     "audience": "xxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
     "user_id": "xxxxxxxxxxxxxxxxxxxxxxx",
     "scope": "https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com",
     "expires_in": 3340,
     "access_type": "offline"
    }

スコープはaccessTokenに与えられた権限です。スコープIDは以下で確認できます。このリンク

アップデート:新しい API の投稿は以下の通りです

https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123

回答は次のようになります

 {
 // These six fields are included in all Google ID Tokens.
 "iss": "https://accounts.google.com",
 "sub": "110169484474386276334",
 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "iat": "1433978353",
 "exp": "1433981953",

 // These seven fields are only included when the user has granted the "profile" and
 // "email" OAuth scopes to the application.
 "email": "[email protected]",
 "email_verified": "true",
 "name" : "Test User",
 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
 "given_name": "Test",
 "family_name": "User",
 "locale": "en"
}

詳細は、https://developers.google.com/identity/sign-in/android/backend-auth

おすすめ記事