HerokuのOAuth認証を管理するプラグイン『Heroku OAuth』を試してみました。
次のコマンドでプラグインをHeroku Toolbeltにインストールできます。
$ heroku plugins:install https://github.com/heroku/heroku-oauth
正しくインストールできているかは次のコマンドで確認できます。
$ heroku plugins
次のコマンドでクライアントを作成します。
$ heroku clients:create "Amazing" https://amazing-client.herokuapp.com/auth/heroku/callback
もしくは次のコマンドでクライアント作成と.envファイルへの出力を同時に実行できるみたいです。
$ heroku clients:create -s Amazing https://amazing-client.herokuapp.com/auth/heroku/callback >> .env
作成済みのクライアント情報は次のコマンドで確認できます。
$ heroku clients
ちょっとミスして同じラベルのものを2つ作成してしまいましたが、とりあえず重複してもエラーにはならないみたいです。
クライアント作成後、クライアントIDを使えば次のコマンドでSecretキーの情報を確認できます。
$ heroku clients:show <ClinetID>
クライント情報は次のコマンドで更新することができます。
$ heroku clients:update <ClientID> --name Amazing2
更新結果を確認するとちゃんとラベル名が更新されました。
クライアントの作成ができたので、authorizationsの作成を行います。これでAPI実行に必要なトークン情報を取得できるみたいです。
登録済みのauthorizations情報は次のコマンドで確認できます。
$ heroku authorizations
authorizationsの作成は次のコマンドです。
$ heroku authorizations:create --description "For use with Anvil"
descriptionは一覧表示のラベルに利用されます。
作成コマンド実行時にトークンだけを表示したい場合は、次のコマンドです。
$ heroku authorizations:create --output_format short
descriptionには『Long-lived user authorization』が登録されていました。
『--expires_in』オプションをつかえば、有効期限のあるトークンを発行できます。つぎのように実行すれば10秒で期限切れのトークンが発光されるみたいです。
$ heroku authorizations:create --expires_in 10
あまり理解できていませんが、こんな感じの使い方ができるそうです。
$ heroku run "HEROKU_EMAIL=`heroku auth:whoami` HEROKU_API_KEY=`heroku authorizations:create --expires_in 120 --output_format short` ./my_job.sh" -a <対象のHerokuアプリ>
オプションで、認可のためのスコープのリストを指定できるそうです。
$ heroku authorizations:create --description "For use with Anvil" --scope identity,read-protected
authorizationsを作成してトークンを取得することができました。
$ curl -u "<your token>" https://api.heroku.com/apps
実行すると『Enter host password for user 』とパスワードを聞かれます。・・・ここがちょっとわからなかったです。
最後に作成したAuthorizationsは次のコマンドで削除できます。
$ heroku authorizations:revoke <対象のトークン>
Clientの方は次のコマンドで削除できました。
$ heroku clients:destroy <ClientID>
まだよくわかっていない部分もあるのですが、HerokuのAPIで利用するトークンはこのHeroku OAuthプラグインをつかって取得できるようになるみたいです。