はじめてのOkta Workflowsシリーズ 第6回 アクションリストにないAPIコマンドの実行

今回のブログでは、Oktaに対してAPIコマンドを実行したいが、まだOktaコネクターのアクションカードにリストされていない(プレビルドされていない)コマンドを利用するためのフローを解説します。

Oktaコネクターにリストされている便利なアクションは、こちらに記載のCore Okta API “Manage Okta Objects” (いわゆるOkta管理用のAPI)を利用しています。Oktaの管理コンソールで行う操作をAPIで実行できるというものです。よく使用されるコマンドは、随時こちらのアクションカードとしてプレビルドのコマンドテンプレートが追加されるため、少ない入力項目だけで簡単にコマンド実行することが可能です。

ただし、全てのコマンドがアクションカードとしてプレビルドされているわけではないので、そういったカード化されていないコマンドを実行する場合にはAPIコマンドの仕様を確認して自ら組み立てる必要があります。

本ブログでは、プレビルドされていないOktaのAPIコマンド”Reactivate User”を、リファレンスの情報をもとにOkta Workflows上で組み立て実行するフローの実装概要を解説します。

Reactivate Userは、ユーザーを新規登録した際にActivationメール送信後7日過ぎても有効化しなかった者に対してメール再送信などで再度有効化を促すといったケースで用いられます。実利用の際はエラーハンドリングなどが必要になりますが、ここでは本質的な処理に絞って実装を解説します。

フローの実装概要

APIリファレンスをもとにURLやHeaderを定義してReactivateコマンドを作成し、処理対象のユーザーのIDを使って実際に実行する流れとなります。

フロー全体

Step 01

(1) APIリファレンスの確認

まず、該当コマンド”Reactivate User”を探します。左右に表示されるペインを頼りに、

Core Okta API → Manage Okta Objects → Users → Lifecycle operations → Reactivate Userと移動します。

https://developer.okta.com/docs/reference/api/users/#reactivate-user

こちらにはコマンドの概要や動作条件、必須パラメータの情報の記載があります。

Request parameters (必須パラメータ)の情報より、このコマンド実行には対象ユーザーのIDとメール送信の有無を入力する必要があることがわかります。

Step 02

Response parameters (戻り値)の情報より、メール送信をfalseとした場合にはActivation用のリンクが返ってくることがわかります。こちらは手動で対象ユーザーに伝える形となります。

Step 03

更に、実際のRequestのサンプルも掲載されているため、こちらをもとにHeaderとURLを作成することとなります。

Step 04

-HがHeader部分であり、AcceptとContent-Typeを次のステップで実際に作成します。

AuthorizationにあるSSWSは、API tokensを用いたAPI実行手順ですのでPostmanなどを使った検証などにはこちらを利用します。今回のようにOkta Workflowsで既に接続済みのOktaコネクターを使う場合には考慮不要です。

(Okta WorkflowsのOktaコネクターは、第3回第4回で述べられている通り、Bearer - OpenID Connect/OAuth2.0を利用しています。)

(2) コマンド作成

(1)で把握した情報をもとにAPIコマンドを作成します。

Step 05

Step 1:URLの作成

(1)のRequest exampleをもとに、コマンドURLを記載します。このURLは後のStep3にて使用しますが、そのOktaコネクターでは既に接続済みのコネクションを使用するため、httpsやOktaDomainの入力は不要となります。

対象ユーザーを識別するuserId部分は後ほどまた編集します。

この例ではメール送付をする(true)オプションとしています。

利用カード: TextのCompose

Step 2:ヘッダーの作成

(1)のRequest exampleをもとに、AcceptとContent-Typeを作成し、それぞれにapplication/jsonを入力します。

利用カード: ObjectのConstruct

Step 3: 実コマンドのカード作成

OktaコネクターのCustom API Actionを選択し、OptionにPOSTを指定します。

こちらがOktaに対するカスタムのAPIコマンド実行カードとなります。

Relative URL部分にStep1のoutputを、Headers部分にStep2のoutputをドラッグ&ドロップします。

Step 06

利用カード: OktaのCustom API Action

(3) ユーザー情報の取得と連携

対象のユーザー名を入力すると、そのUserIdを抽出して先のコマンドURLへ連携します。

あくまで今回はサンプルのためこのように対象ユーザーを直接入力していますが、実際のユースケースとしては、この部分は第5回で紹介したような特定の条件に合致したユーザーリストを使用する形が多いかと思います。

Step 07

Step 1:ユーザー名の入力

簡単に試験対象ユーザーを切り替えられるように、Textにてユーザー名を入力する項目を別途用意します。userIdを最初から把握している状況であればこのStepは省略できます。

利用カード: TextのCompose

Step 2:userIdの取得

ユーザー名から対象ユーザーの詳細情報を取得し、userIdを次のカードへ渡せるようにOutputとします。

利用カード: OktaのRead User

Step 3:コマンドURLのuserIdを補完

先の(2)で使用したコマンドURLの変数であるuserIdを、取得したuserIdに置き換えるため、Read UserカードのOutput: userIdをドラッグ&ドロップします。

利用カード: (2)で作成したTextのCompose

(4) フローの実行と結果の確認

作成したフローを実行し、成功すると200 responseが返ってきます。

ユーザーのメールアドレスに対しては、以下の様なActivationのメールが送られてきています。

Step 08

サンプル・フローのダウンロード

今回解説したフローは、こちらからFlow Packファイルとしてダウンロードし、Okta Workflowsにインポートすることで試すことができます。ただし、あくまでサンプルですので、動作の保証をするものではなく、フロー全体としての動作やロジックはサポート対象にはなりませんのでご了承ください。

最後に

Okta Workflowsを使うことで、アクションカード化されていないOktaのAPIコマンドでも簡単に実装できることを実感いただけたでしょうか。今回の実装例では、出来るだけ分かりやすくお伝えするためにユーザー名は手打ちとしていますが、前回ご紹介したユーザリスト化するフローと組み合わせれば、Activateしていないユーザーだけを抽出して彼らにReactivateを実行することもできます。

また、まだOktaがコネクター化していないアプリも、同様にアプリ側のAPIリファレンスを参考にOkta Workflowsから容易にコマンド実行することが可能なため、是非お試しください。