30
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

サービスアカウントの認証手順

Posted at

#はじめに
##概要
外部のプログラムからGoogleAPIでGoogleアカウントのリソースにアクセスするためには、GoogleのサービスアカウントでOAuth2の認証が必要です。

ここでは認証の手順について書いていきます。

##必要なもの
・Googleアカウント
・Google API client Library(今回はpython)
##認証の仕組み
OAuth2.png
サービスアカウントの秘密鍵でJWT(Json Web Token)を生成して、JWTでAPI用のトークンを取得します。

#プロジェクトの選択or作成
google developer console
Developer consoleからプロジェクト選択or新規作成
##使用するAPIの有効化
API Managerのライブラリから利用するAPIを選択し、有効にする。

#サービスアカウント作成

##サービスアカウントキーの作成

認証情報 ▷ 認証情報を作成 ▷ 「サービスアカウントキー」 ▷ 新しいサービスアカウント ▷ JSON ▷ 作成

※作成ボタンを押すと「秘密鍵を含むJSONファイル」が自動的にダウンロードされる。その後ダウンロード出来ないので注意。

##クライアントIDの作成(管理者権限が必要な場合)

認証情報 ▷ サービスアカウントの管理 ▷ 作成したサービスアカウントの右端の点を押す ▷ 編集 ▷ Gsuiteドメイン全体の権限を委任するにチェック

クライアントIDが表示できるようになっていることを確認

#サービスアカウントにドメイン全体の権限を委任
※管理者権限が必要な場合の手順です

管理コンソールにadminでログイン
セキュリティ→もっと見る→詳細設定→「API クライアント アクセスを管理する」

サービスアカウントの「クライアントID」、利用するAPIの「scope」を入力して承認。

(JWTのclaimに"sub":"user_email"の追加が必要。)
#JWTの生成
作成したサービスアカウントの秘密鍵を用いてJWTを作成します。

$curl -d "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion="ここにJWT" https://www.googleapis.com/oauth2/v4/token
 
{
  "access_token" : "ya29.Elo4BOPu_8xrvZdah28zt3dgrX-x87vdy_BbFVt07XEm83d1S6-uZHBOCyKJdafHwIdV3ZiVDRdqhP9TpE8Vzo6_QZeAofp_Z5rMK_uwf-q_h_yrNcgTccdgSkY",
  "expires_in" : 3600,
  "token_type" : "Bearer"
}
$curl -H 'Authorization: Bearer ya29.Elo4BNIcKX8SEqyTg7CwGrp32W75pUddHQJIvB_mtk31-qnuz8N8MGOkZjeOLykuch8ATNo2jfa-hHOpNOBFHVH7lUS8MRNTN6YQj_kpCN4afoZAH_TPimXxEbA'  https://www.googleapis.com/admin/directory/v1/users/hoge@example.com 

##API client Library for python で実装する場合
###client library のインストール

$ pip install --upgrade google-api-python-client

Successfully installed google-api-python-client-1.6.2 httplib2-0.10.3 oauth2client-4.1.2 pyasn1-0.2.3 pyasn1-modules-0.0.9 rsa-3.4.2 six-1.10.0 uritemplate-3.0.0  ⇦くっついてくるもの

###コード

credentials.py
from oauth2client.service_account import ServiceAccountCredentials
from httplib2 import Http
 
 
scopes = ['https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.orgunit']
credentials = ServiceAccountCredentials.from_json_keyfile_name('/tmp/googleapi/serviceaccount.json', scopes=scopes)
delegated_credentials = credentials.create_delegated('admin@example.com')  # 権限を委任
http_auth = credentials.authorize(Http())

credentialsオブジェクトを生成することで資格情報が保持される。

30
32
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
30
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?