この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Auth0は様々なアプリやAPIに対応可能な統合認証基盤サービスです。Auth0公式が提供しているAuth0 Deploy CLIを使用することで、テナントの設定をソースコードで管理できます。また、既存のCI/CDパイプラインと統合して、Auth0テナントのCI/CD環境を構築することも可能です。
今回はAuth0のCI/CD環境をGitHub Actionsで構築してみます。
Auth0 Deploy CLIをインストール
npmで個人のPC環境にAuth0 Deploy CLIをインストールします。
npm i -g auth0-deploy-cli
テナント設定をエクスポート
プロジェクトのディレクトリにAuth0 Deploy CLIの設定ファイルを作成します。認証情報は次の記事を参考にアプリを作成後、アプリの設定ページから取得してください。
config.json
{
"AUTH0_DOMAIN": "auth0-deploy-cli-extension domain",
"AUTH0_CLIENT_SECRET": "auth0-deploy-cli-extension client ID",
"AUTH0_CLIENT_ID": "auth0-deploy-cli-extension client secret",
"AUTH0_ALLOW_DELETE": true
}
認証情報はセキュリティの都合上、リポジトリで管理したくないので.gitignore
にconfig.json
を追加します。
次のコマンドでAuth0のテナント設定をエクスポートします。
a0deploy export -c config.json -f yaml -o
デプロイ用のスクリプトを実装
npmでプロジェクトにパッケージをインストールします。
npm init
npm i --save-dev auth0-deploy-cli
デプロイ用のスクリプトを実装します。
deploy.js
const deploy = require("auth0-deploy-cli").deploy;
const config = {
AUTH0_DOMAIN: process.env.AUTH0_DOMAIN,
AUTH0_CLIENT_SECRET: process.env.AUTH0_CLIENT_SECRET,
AUTH0_CLIENT_ID: process.env.AUTH0_CLIENT_ID,
AUTH0_ALLOW_DELETE: true,
AUTH0_API_MAX_RETRIES: 10,
};
deploy({
input_file: "tenant.yaml",
config: config,
env: process.env,
})
.then(() => console.log("yey deploy was successful"))
.catch((err) => console.log(`Oh no, something went wrong. Error: ${err}`));
package.json
にデプロイ用のスクリプトを追加します。
package.json
"scripts": {
"deploy": "node scripts/deploy.js"
},
次のコマンドでデプロイできるようになりました。
# 環境変数をセット
export AUTH0_DOMAIN='ドメイン'
export AUTH0_CLIENT_SECRET='シークレットキー'
export AUTH0_CLIENT_ID='クライアントID'
# デプロイ
npm run deploy
GitHub ActionsでCI/CDを構築
ここからはGitHub ActionsでCI/CDを構築します。
シークレット変数を設定
Auth0の認証情報をプロジェクトのシークレット変数に登録します。
ワークフローを作成
GitHubプロジェクトのActionsから新規ワークフローを作成します。
Auth0のデプロイは次のようなワークフローになります。
.github/workflows/auth0.yml
name: Auth0
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
deploy:
runs-on: ubuntu-latest
env:
AUTH0_DOMAIN: ${{secrets.AUTH0_DOMAIN}}
AUTH0_CLIENT_SECRET: ${{secrets.AUTH0_CLIENT_SECRET}}
AUTH0_CLIENT_ID: ${{secrets.AUTH0_CLIENT_ID}}
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: "12.x"
- run: npm ci
- run: npm run deploy
テストを追加する場合はjobs.deploy
の前にテストのジョブを追加します。
動作確認
試しにテナント設定を変更してmasterブランチにプッシュしてみます。
tenant.yaml
~~~~~~~~~~~~~~~~~~~~~~~~~~~
tenant:
enabled_locales:
- ja
~~~~~~~~~~~~~~~~~~~~~~~~~~~
GitHub Actionsのワークフローが実行されます。
Auth0のテナント設定が反映されました。
テナント設定で環境変数を利用
テナントの設定ファイル「tenant.yaml」で環境変数を使う場合は、##KEY##
のように記載します。
tenant.yaml
~~~~~~~~~~~~~~~~~~~~~~~~~~~
clients:
- name: My App
allowed_clients: []
allowed_logout_urls:
- "##ALLOWED_ORIGIN_URL##"
app_type: spa
callbacks:
- "##ALLOWED_ORIGIN_URL##"
client_aliases: []
cross_origin_auth: false
custom_login_page_on: true
grant_types:
- authorization_code
- implicit
- refresh_token
is_first_party: true
is_token_endpoint_ip_header_trusted: false
jwt_configuration:
alg: RS256
lifetime_in_seconds: 36000
secret_encoded: false
native_social_login:
apple:
enabled: false
facebook:
enabled: false
oidc_conformant: true
refresh_token:
rotation_type: non-rotating
expiration_type: non-expiring
sso_disabled: false
token_endpoint_auth_method: none
web_origins:
- "##ALLOWED_ORIGIN_URL##"
~~~~~~~~~~~~~~~~~~~~~~~~~~~
まとめ
実際に認証基盤を運用する場合、開発環境や検証環境も用意することが多いと思います。今回はGitHub ActionsでCI/CD環境を構築してデプロイを自動化することで、効率よく本番環境へリリースできるようになりました。WEBの管理画面から手動で各環境を管理すると煩雑になるので、YAMLでテナントの設定を管理できるのはとても便利です。