Githubアクションを用いたAutos 0ルールの連続的統合と展開


Auth 0規則はAuth 0が認証パイプラインを拡張してカスタマイズするために提供するメカニズムです.彼らは、ユーザーが自分のパスワードを提供したり、コード/リンクを自分のメールアドレスや電話番号に送信を入力して自分のアイデンティティを証明した後に実行されます.彼らはあなたのJWTのペイロードを変更することができます本当に強力なツールは、ユーザーがMFAの課題を完了したり、サイト間のページにリダイレクトを取得します.ルールコードで動作するデフォルトの方法は、Auth 0コンソールを介して行います.私はコンソールでコードを編集するの大ファンではない.テストするのは難しすぎて、コードへの変更を追跡する明確な方法はありません.実行中のものは、ソースコントロールにあるものとは一致しません.ソースコントロールには何もありません.
この投稿では、Auth 0 Deploy CLIとGithubアクションを使用して、Author 0規則の連続的な統合と継続的な配信を設定します.このポスト(このポストを含む)のすべてのためのコードは、中で見つかりますthis Github repository .

セットアップ


まず最初にするのは、Auth 0を設定してコードをプッシュすることです.
Auth 0には、これを設定する拡張モジュールがあります.これは、Ci/CD操作のAuth 0部分を取得する最も簡単な方法です.
インストールする
  • 「拡張」ウィンドウに移動する
  • CLI拡張モジュールをクリックします
  • それをインストールし、必要な範囲にアクセスできるように同意します.
  • これは、新しいauth0-deploy-cli-extension これは、Auth0 Management API それはテナントでデフォルトで設定されます.

    ルールコード


    各ルールは、Auth 0 Webタスク環境(NODEJS 12)内で実行される1つの関数から構成されます.普通のことから、それはただ一つの機能でなければならないということです.サンプル規則がコンソールに作成されると、次のようになります.
    function (user, context, callback) {
      // Ok there is more code here in the sample but you get the idea.
    }
    
    コンソールの書き込みの外でさえ、これはまだユニットテストを書くのが難しいです.私がしたいことは、コードパスを実行することができますし、継続的に生産に配信について私はより快適にするユニットテストを書くことです.
    Jestのようなテストフレームワークでこの作業を行うには、関数をエクスポートする必要があります.Webタスク環境は、これがどのように動作するかについてかなり具体的です.ESモジュールでは動作しませんし、グローバルにも公開されませんmodule プロパティ.試してみるならmodule.exports = rule or export rule Auth 0環境では、エラーをスローします.
    回避策は、規則関数を返す匿名の即時実行関数でコードをラップすることですmodule 存在しない場合は、関数をエクスポートします.Jestテストランナーモジュール内で実行するときにこの方法が存在し、コードがエクスポートされますが、Auth 0環境では規則が返され、コードが機能することができます.
    以下のようになります.
    (() => {
      function rule(user, context, callback) {
        // TODO: implement your rule
      }
      if (module) {
        module.exports = rule;
      } else {
        return rule;
      }
    })() // prettier-ignore
    
    このブロックでは、最後の行にセミコロンがないことに注意してください.ここでセミコロンを持つと、Auth 0規則はエラーをスローします.Thats理由// prettier-ignore そこには、私は保存するたびに、セミコロンを追加してきれいです.
    これにより、コードがJestテストにインポートされ、認証フローの一部として実行されているコードが実際に動作することを確信することができます.

    を使用します


    Auth 0 Deploy CLIは、あなたに代わってAuth 0 Management APIと対話するツールです.Auth 0展開CLIはNPMパッケージで、グローバルにインストールするかNPXを使用することで実行できます.私はそれを避けることができれば世界的に何かを実行することを避けることを好む.プロジェクトに展開CLIをインストールし、NPMスクリプトから実行しています.

    設定の設定


    この設定は、json ファイル.必要最小限AUTH0_DOMAIN , AUTH0_CLIENT_SECRET , and AUTH0_CLIENT_ID . 私はAUTH0_ALLOW_DELETE プロパティに設定し、コードに存在しないAuth 0に格納されているルールを削除するようにtrueに設定します.
    私のファイルで##variable## パラメータの値を環境変数として渡すことができる表記法.これはGitHubアクションとの統合を容易にし、誤って秘密をコミットすることを避けるために役立ちます.置換マッピングに関する詳細な情報を見つけることができますin the Auth0 documentation .
    {
      "AUTH0_DOMAIN": "##AUTH0_DOMAIN##",
      "AUTH0_CLIENT_SECRET": "##AUTH0_CLIENT_SECRET##",
      "AUTH0_CLIENT_ID": "##AUTH0_CLIENT_ID##",
      "AUTH0_ALLOW_DELETE": true
    }
    

    Auth 0への配備


    規則を設定するのに必要なコード以上があります.以下のYAMLファイルはrules/sampleRule.js ユーザーがログインした後に最初のルールとして実行し、環境変数として渡される秘密を設定します.このYAMLファイルは、必要に応じて多くの、またはテナント設定のほとんどを含めることができます.このケースでは、他のテナント設定とは別の独自の変更サイクルがあるので、この展開を規則のみ更新するようにしています.
    rules:
      - name: sampleRule
        script: ./rules/sampleRule.js
        stage: login_success
        enabled: true
        order: 1
    rulesConfigs:
      - key: "ItsASecret"
        value: "##SECRET_IN_ENV_VARIABLES##"
    
    テナントに規則をインポートする

    展開をテストする


    上で設定した設定は## このコマンドを実行するために環境変数を設定するための環境変数を指定すると、いくつかの値がauth0 consoleである必要があります.の設定値を取得するauth0-deploy-cli Auth 0拡張が作成されたアプリケーション.という名前の環境変数を設定しますAUTH0_DOMAIN , AUTH0_CLIENT_SECRET , and AUTH0_CLIENT_ID .
    The image of the Application
    環境変数に設定を追加し、import文を実行します.a0deploy import -c ./config.json -i ./src/tenant.yaml .
    私は、それが展開されたのと同じコードであるのを見るために、それがAuth 0コンソールでコードをチェックすることによって働いているとテストしました.
    この完全に、私はコンソールにそれをコピーすることなく規則にコードを展開する能力を持っています.それは良い一歩前進です.次のことは、コードがバージョンコントロールにプッシュされたときに自動的に発生します.

    githubアクションで実行する


    自動連続統合と連続展開を行うには、githubアクションを使いました.私はその仕事を二つの仕事に分けた.すべてのプッシュで実行されるテストと、実際にコードをAuth 0に展開するテストを実行するもの.この2番目のコードは、コードがmain ブランチ、機能ブランチの開発を行うことができ、コードが完了したときにのみライブ環境に配置できます.
    最初のジョブはAuth 0展開に関連していないので、コードを介して取得します.興味があれば見つけることができますhere ..
    番目の仕事は関連性が高い.それは、それがUbuntuの上で走ることになっていることをセットアップすることによって始まりますbuild 仕事は終わりました、そしてmain 枝.
    deploy:
      runs-on: ubuntu-latest
      if: github.ref == 'refs/heads/main'
      needs:
        - build
    
    次の手順は、コードをチェックアウトしてNodeJS 12を設定し、プロジェクトの依存関係をインストールすることから始める.この場合、これらの依存関係はauths 0 deploy cliを含んでいます.
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2-beta
        with:
          node-version: "12"
      - name: NPM Install
        run: npm install
    
    次のステップは、Author 0への実際の展開です.このステップでは、Githubコンソールにアップロードされた秘密から必要な環境変数を設定します.一度実行されるnpm run deploy 実行するNPMスクリプトa0deploy import -c ./config.json -i ./src/tenant.yaml .
    - name: Push to Auth0
      env:
        AUTH0_DOMAIN: ${{secrets.AUTH0_DOMAIN}}
        AUTH0_CLIENT_SECRET: ${{secrets.AUTH0_CLIENT_SECRET}}
        AUTH0_CLIENT_ID: ${{secrets.AUTH0_CLIENT_ID}}
      run: npm run deploy
    

    最後に


    それで終わりだ.私は自動的にユニットのテストを実行した後、Author 0に1つ以上のルールを展開することができます.このアプローチは、私が展開したコードに自信を持っており、どんなサイズのチームで働くときにも重要です.

    As a final note the Auth0 Deploy CLI can be used to deploy pretty much all of your Auth0 configuration. If you are using Auth0 for production workloads I'd strongly suggest using a configuration as code approach to keep track of changes to your environment and allow testing changes in staging environments.

    Different sections of the config (rules, custom login pages, applications, hooks, etc) can be stored in different repositories to reflect it's rate of and reasons to change.


    カバー写真hannah grace からunsplash