LoginSignup
2
5

More than 5 years have passed since last update.

Google Cloud for Goで OAuth アクセストークンを使う

Posted at

概要

GoogleAPIを利用するデスクトップアプリのOAuth2.0認証では,アクセストークンの利用例として Google APIs Client Library for Go を使って利用可能な Zone リストを取得する方法を紹介した.

Go から Google Cloud Platform にアクセスする方法には,Google Cloud for Go を利用する方法もある.
Stackdriver Logging からログを取得するStackdriver Logging からログを取得する(その2) で用いている logadminlogging パッケージはこの Google Cloud for Go ライブラリに含まれている.

本記事では,取得した OAuth 2.0 アクセストークンを,Google Cloud for Go のクライアントから利用する方法を紹介する.

Google Cloud for Go のクライアント

Google APIs Client Library for Go では,アクセストークンが付与された http.Client を渡すことで,そのトークンを使用していた.
一方 Google Cloud for Go のクライアントでは,TokenSource を接続オプションとして NewClient に渡すことで使用する.

oauth2.Token 型のアクセストークンから TokenSource を取得するには,前回同様 Config を利用する.Config に認証に必要な情報を渡していることで,アクセストークンの期限が切れていた場合に自動で更新を試みてくれる.

例えば,アクセストークンを使って logging.Client を作成するには次のようなコードになる.

import (
    "context"

    "cloud.google.com/go/logging/apiv2"
    "google.golang.org/api/option"
)

const (
    authorizeEndpoint = "https://accounts.google.com/o/oauth2/v2/auth"
    tokenEndpoint = "https://www.googleapis.com/oauth2/v4/token"
    gcpScope = "https://www.googleapis.com/auth/cloud-platform"
)

func NewLoggingClient(ctx context.Context, token *oauth2.Token) (*logging.Client, error){

    cfg := &oauth2.Config{
        ClientID:     ClientID,
        ClientSecret: ClientSecret,
        Endpoint: oauth2.Endpoint{
            AuthURL:  authorizeEndpoint,
            TokenURL: tokenEndpoint,
        },
        Scopes:      []string{gcpScope},
    }

    return logging.NewClient(
        ctx,
        option.WithTokenSource(cfg.TokenSource(ctx, token)))
}
2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5