Android プラットフォーム用のモバイル アプリケーションをカスタム node.js サーバー API に対して認証しようとしています。Google Play がインストールされた Android デバイスではアプリ開発者がこれを利用できるため、独自の認証を行うのではなく、Google OAuth2 トークンを使用したいと考えています。ここGoogleAuthUtil.getToken
に記載されている Google Play Services ライブラリからの呼び出しを使用しています。このAndroid 開発者のブログ投稿で概説されているアドバイスに従うようにしています
私の場合、このgetToken
メソッドは 857 バイトの長い文字列を返しています。このトークンを Google のTokenInfoエンドポイントに渡そうとすると、次のように返されます。
{'error': 'invalid_token', 'error_description': '無効な値'}
ここで何が間違っていますか?getToken 呼び出しの「スコープ」で、送信しています:
audience:server:client_id:**i_put_my_clientid_here**
. 「インストール済みアプリケーション」用に生成された clientid があります。このクライアント ID を使用すると、getToken の呼び出しはまったく機能しません。「サービス アカウント」のクライアント ID を生成すると、呼び出しは成功しますが、上記のように TokenInfo エンドポイントに渡すときに失敗する 857 バイトのトークンを取得します。
EDIT:「Webアプリケーション」のクライアントIDも作成しました。これは、を呼び出すときに使用する正しいクライアントIDであるようgetToken
です。しかし、動作は同じです。Google のエンドポイントを呼び出すときに検証されない 857 バイトのトークンが返されます。
Android で Google Play サービスを使用して有効な認証トークンを適切に取得するにはどうすればよいですか? 適切なトークンを取得したら、それをサーバー側で検証するための適切な node.js ライブラリは何ですか? Passport-google-oauthを使用できますか?