2022年6月2日木曜日

Heroku CLI でセッショントークン切れが嫌な場合は Long-lived トークンを作成しよう

Heroku CLI でセッショントークン切れが嫌な場合は Long-lived トークンを作成しよう

概要

heroku login などでログインした場合に取得できるアクセストークンには期限があり 1 ヶ月で期限切れになります
期限切れになった場合は再度 heroku login を実行すれば良いのですがスクリプトなどで heroku コマンドを使っている場合は面倒です (ログインにブラウザを立ち上げる必要があるので)
その場合には期限切れのないトークンを生成しそのトークンを使って CLI を叩けるように設定します

環境

  • macOS 11.6.6
  • Heroku CLI 7.60.2

Long Lived Token の作成

以下で生成できます

  • heroku authorizations:create
Long-lived user authorization        xxx-xxx-xxx-xxx-xxx  global

こんな感じで生成できれば OK です
生成されたトークンの ID (上記の xxx-xxx-xxx-xxx-xxx の部分) はメモしておきます

Long Lived Token のアクセストークンを取得する

ID から CLI をコールするためのアクセストークンを取得します

  • heroku authorizations:info xxx-xxx-xxx-xxx-xxx

で確認できます

Client:      <none>
ID:          xxx-xxx-xxx-xxx-xxx
Description: Long-lived user authorization
Scope:       global
Token:       yyy-yyy-yyy-yyy-yyy
Updated at:  Thu Jun 02 2022 08:26:43 GMT+0900 (日本標準時) (about 1 hour ago)

上記の yyy-yyy-yyy-yyy-yyy の部分がアクセスに必要なアクセストークンになります
このアクセストークンを使って CLI をコールするようにします

.netrc の編集

heroku コマンドの認証情報は ~/.netrc に格納されています

  • vim ~/.netrc
machine api.heroku.com
  login name1@example.com
  password yyy-yyy-yyy-yyy-yyy 
machine git.heroku.com
  login name1@example.com
  password yyy-yyy-yyy-yyy-yyy 

上記のパスワードの部分を先程メモしたアクセストークンに書き換えます
書き換えたら保存します

動作確認

本当に期限のないトークンでコールできるか確認しましょう

  • heroku auto:token

で問題なくアクセスできることと期限切れの警告が表示されないことを確認しましょう
もしまだうまく設定できていない場合は以下のように表示されるはずです

 ›   Warning: token will expire tomorrow at 9:13 AM                                                                                          
 ›   Use heroku authorizations:create to generate a long-term token                                                                          
zzz-zzz-zzz-zzz-zzz

注意事項

理由は不明なのですが Long Lived Token を設定後に再度 heroku login すると設定を上書きしてしまうようです
また Long Lived Token のクライアントトークン自体も削除してしまうのでできれば設定後は heroku login しないほうが良いかもしれません

おまけ: 発行している OAuth クライアントの一覧を確認する方法

  • heroku authorizations

最後に

Heroku CLI で期限切れにならないアクセストークンを設定する方法を紹介しました

使用していないクライアントトークンは heroku authorizations:revoke コマンドで削除しても良いかなと思います
また revoke は Heroku のダッシュボード上からもできるのでどちらでも大丈夫です

参考サイト

0 件のコメント:

コメントを投稿