12

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を使用できますか?

4

5 に答える 5

4

うーん、これは実際には答えではなくコメントですが、それらに改行を入れることはできません:

  1. put_my_clientid_here スポットに入る Web 側の Clent ID である必要があります
  2. GoogleAuthUtil.getToken() が例外をスローせずに文字列を返す場合、それは本当に有効なはずです。tokeninfo をヒットしたとき、...tokeninfo?id_token=<857-byte-value-here> を使用しましたか?
  3. あなたがルビストなら、google-id-token gem を入手して、857 バイトのトークンを検証できるかどうかを確認してください。
于 2013-05-01T21:34:12.213 に答える
3

If you just want to read the contents of the data returned by GoogleAuthUtil.getToken then the process is very simple. The returned data is simply a JWT. So all you'd have to do is split the data by the . character, and then base64 (url) decode each piece.

It gets slightly more complicated if you want you want to verify the message's authenticity. Simply use your favorite crypto library to do the verification. The 3rd component of the JWT is the signature of the data and the Google certs are publicly available; that's all you need to verify the message.

于 2013-12-08T06:20:36.037 に答える
2

公式ノード SDK を使用すると、今すぐそれを行うことができます。

リンクは次のとおりです: https://github.com/google/google-auth-library-nodejs/blob/master/lib/auth/oauth2client.js#L384

于 2015-08-28T03:16:53.500 に答える
2

1 週間、passport.js を使用して Node.js サーバーの Android クライアント アプリケーションで受信した GoogleAuthUtil トークンを検証する方法を検討してきました。

最後に、タスクを完全に実行するパスポート-グーグル-トークン パスポート戦略に出会いました。

https://www.npmjs.com/package/passport-google-token

詳細は上記リンク先にあります。

于 2015-03-27T06:53:46.530 に答える
1

デバイスからサーバーへのトークンの処理に関して Android がどのように機能するかについては、あまり詳しくありません。しかし、私の一般的な印象は、典型的な Web ベースの OAuth ダンスを経験していないということです。代わりに、トークンを保持しているユーザーに対応する情報を返す「ユーザー情報」エンドポイントを直接呼び出すか、トークンが無効な場合はリクエストを拒否します。この関連する質問についていくつかの議論があります:

サードパーティのサーバーで Android の authToken を検証する

実際、トークンはデバイスとサーバーの両方で共有されるシークレットになるため、トークンを保護することが重要です。

Facebook と Twitter には、iOS デバイスのトークンを使用して同様のことを行うために開発されたいくつかの戦略があります。

https://github.com/drudge/passport-twitter-token
https://github.com/drudge/passport-facebook-token

それらからインスピレーションを得て、Google のエンドポイントと通信するように微調整できます。これがどうなるか教えてください。同様の「passport-google-token」戦略を見たいので、実装する場合はお知らせください。リンクします!

于 2013-05-01T18:08:18.830 に答える