2016-04-19 10 views
2

GoバックエンドサーバープロジェクトでGoogleのAndroid用サインインのIDトークンを検証する方法を探しています。GoでGoogleのログインIDトークンを確認する

GoでGoogle APIクライアントライブラリを使用してIDトークンを検証する同等の機能は何ですか?このページから

GoogleのAPIクライアントライブラリセクション

を使用して

https://developers.google.com/identity/sign-in/android/backend-auth#using-a-google-api-client-library

JavaとPythonの例があるとPHP、ノード用Google APIクライアントライブラリでIDトークンを検証するためのリンクがあります.js、および他の言語。目標言語を確認した。私は、JavaとPythonの例のようにトークンを検証するためではない、同等の機能を発見した、しかし、ここで

https://github.com/google/google-api-go-client/blob/master/GettingStarted.md

を移動します。そのようなことをして、Goに何か機能がありますか?

私はそれが可能レイテンシとネットワークエラーが導入されて以来、トークン情報エンドポイント

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

を使用する必要はありません。 Google APIクライアントライブラリを使用したいと考えています。私はどこを調べなければならないか教えてください。

答えて

5

これは私がhttps://github.com/google/google-api-go-clientライブラリを使用してそれをやった方法です:

import (
    "google.golang.org/api/oauth2/v2" 
    "net/http" 
) 

var httpClient = &http.Client{} 

func verifyIdToken(idToken string) (*oauth2.Tokeninfo, error) { 
    oauth2Service, err := oauth2.New(httpClient) 
    tokenInfoCall := oauth2Service.Tokeninfo() 
    tokenInfoCall.IdToken(idToken) 
    tokenInfo, err := tokenInfoCall.Do() 
    if err != nil { 
     return nil, err 
    } 
    return tokenInfo, nil 
} 

oauth2.Tokeninfoオブジェクトは、ユーザーに関する情報を持っています。 これはhttps://www.googleapis.com/oauth2/v2/tokeninfoを呼び出していることに注意してください。私はすべてのGoogle APIクライアントライブラリがこのhttpコールをフードの下で行うと考えています。

+0

我々はV2//ないV3のOAuth2呼び出すために、我々はまだそのURLにコールする必要がある場合、どのようにそれは、待ち時間やネットワークの問題を回避する必要があるように思え? – Ook

+0

google-api-go-clientにはoauth2/v3はありませんが、v2はうまく動作します。あなたがhttpコールを避けることができるかどうかはわかりません。 – AlexCV

3

GoogleのidTokenは実際にはJWT形式であり、コンパクトで自己完結型の署名付きJSONです。

も参照してください:https://jwt.io/introduction/

グーグル-AUTH-ライブラリnodejsのOAuth2Client.prototype.verifyIdTokenは、Googleの公開鍵を使用してidtokenを確認し、tokeninfoエンドポイント呼び出さずidtokenからクレームを抽出します。

google-auth-library-nodejsからverifyIdToken関数を移植し、このライブラリを作成しました:https://github.com/futurenda/google-auth-id-token-verifier

使用法:

import (
    "github.com/futurenda/google-auth-id-token-verifier" 
) 

v := googleAuthIDTokenVerifier.Verifier{} 
aud := "xxxxxx-yyyyyyy.apps.googleusercontent.com" 
err := v.VerifyIDToken(TOKEN, []string{ 
    aud, 
}) 
if err == nil { 
    claimSet, err := googleAuthIDTokenVerifier.Decode(TOKEN) 
    // claimSet.Iss,claimSet.Email ... (See claimset.go) 
} 
関連する問題