0
0

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 1 year has passed since last update.

Googleサービスアカウントの秘密鍵を使用してPythonでJWTを生成

Posted at

四苦八苦してやっと動いたものなので、責任は持てませんが、自分用メモおよび、もしかしたらご参考になるかもと思い掲載。

やること

Googleサービスアカウントの秘密鍵を使用して1時間の有効期限を持つJWT(JSON Web Token)を生成します。

Googleサービスアカウントの秘密鍵作成

  • Google Cloud Platform Console のナビゲーション メニュー で、
    APIs & Services > Credentials に移動

  • 目的のプロジェクトを選択し、[Create Credentials > Service account] をクリック。

  • Service account details で、新しいアカウントの名前を入力して [Create] をクリック。

  • Service account permissions ページで、Select a role プルダウンに移動。

  • [Service Accounts > Service Account Token Creator] を選択して、[Continue] をクリック。

  • [Grant users access to this service account] ページで [Done] をクリック。

  • APIs & Services > Credentials に戻り、
    Service Accounts セクションまで下にスクロールして、作成したアカウントの名前をクリック。

  • Service account details ページで、Keys セクションまでスクロールして Add Key > Create new key を選択。

  • 鍵のタイプとして JSON を選択し、[Create] をクリック。

これで、秘密鍵を含む JSON ファイルがPCにダウンロードされる。

準備

必要なライブラリのインストール

$ pip install pyjwt
$ pip install cryptography

コード

createJWT.py
# coding: utf-8

import jwt
import time
import json  
from datetime import datetime, timedelta

# サービスアカウントの秘密鍵とそのメールアドレスを含むJSONファイルから情報を読み込む
with open('秘密鍵JSONファイルのパス', 'r') as f:
    service_account_info = json.load(f)

# 以下 'private_key'と'client_email'は秘密鍵のJSONファイルにある。長ったらしいキーやemailを記入するのではなく、これを変えずにそのまま'private_key'と'client_email'でいい、
private_key = service_account_info['private_key']
client_email = service_account_info['client_email']

current_time = datetime.now()
# 1時間期限を設定
expiration_time = current_time + timedelta(hours=1)

# JWTのペイロードの作成
payload = {
    'iss': client_email,
    'sub': client_email,
    'iat': int(current_time.timestamp()),
    'exp': int(expiration_time.timestamp()),
    # 必要に応じて、その他のペイロード情報を追加
}

# JWTの生成
token = jwt.encode(payload, private_key, algorithm='RS256').decode('utf-8')
print(token)

実行結果

$ python createJWT.py

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJwbGF0ZWF5YXItYXBwQHBsYXRlYXUtYXIuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzdWIiOiJwbGF0ZWF5YXItYXBwQHBsYXRlYXUtYXIuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJpYXQiOjE2OTMwOTM0ODMsImV4cCI6MTY5MzA5NzA4M30.YMWwCbCenFZW638CTOs2V0zmywovMOutYViijaX3rXDd7ENYV_lLYxzwasAURE31uBzkaRGk3_qeqgYiHbhOlmEdD3Mttq_cB7rD0HS1yjm4D7unZcemVUxDg7I18LjX-PIQ1FyiyqlAN42wgoYezTUOG4vIbprxt1IpGc0qA27TTD95yOW8JtzUIBQQW6WvRoMmi1Kuw_TNC5gUPzSeNnfl8pRo_xvnmJsmzNjaOhqL3Ba5PQe0Kr4sFwWAWVQOfjb7yWXthfpNeRzE4H_ICfS2ExLbzCvwo8Qmc47uiXH01ujIqRFlyVrnkG5qVs0NXmdTBZdybH9P8Cp2Nu_KDA

JWTが生成されました。

以上です。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?