コンテンツまでスキップ

【Okta】SmartHRとOktaをOkta Workflowsでスマートに連携してみた

はじめに


こんにちは、 ネクストモード株式会社 のSaaSおじさん久住です

ネクストモードではID統合管理(IDaaS)のOktaを利用して各SaaSへのシングル・サインオンやプロビジョニングの一元管理をしています

今回は人事労務SaaSのSmartHRとOktaの社員情報の同期をOkta Workflowsを利用してスマートに実施する方法をご紹介します

※ 2023年5月25日追記


昨日のOkta City Tour Tokyo 2023にてSmartHRのOkta Workflowsコネクターが発表されました!

早速検証もしていますので、こちらも是非御覧ください!

OktaとSmartHRの連携


2022年3月にOkta Integration Network(OIN)にSmartHRが登録され、OktaとSmartHR間でのSCIMでのユーザープロビジョニングが実現できるようになりました

また、2022年5月にはSCIM連携により同期可能な属性が3つ(雇用形態、役職、部署情報)増えたことで、より細やかな属性同期が可能となっています


現状のOINでの課題


OINでのユーザー同期で「やったぜ!」と思ってましたが、SCIM連携で同期できる属性がまだ少なく、SmartHRの属性をすべて同期することができないのでSCIM連携のみでは足りない部分が多くあります

そんなときにOkta Workflowsの出番です!

SmartHRはSmartHR側で情報が更新された際にWebhookで指定されたURLに通知することができますので、Okta Workflowsを利用してシームレスにユーザー情報を同期します

Okta Workflowsとは


Okta Workflowsは何らかのイベント(トリガー)を元にタスクを実行することができる自動化機能(IPaaS)で、Oktaを利用すると無償で5フローまで利用できます

複雑なコーディングを必要とせず、GUIベースで直感的に操作ができるため、設定も慣れてしまえばとても楽に進めることができます

詳細についてはOkta社の「はじめてのOkta Workflwosシリーズ」がわかりやすいので、是非御覧ください


Okta Workflows:Webhook用のAPI Endpoint設定


Okta管理画面からWorkflowWorkflows consoleをクリックし、Workflows consoleに遷移します

Workflows consoleにてFlowsからNew Flowをクリックし、フローの作成を開始します

Okta-SmartHR-003

まずはトリガーとなるイベントの設定のため、Add eventをクリックします

Okta-SmartHR-004

Webhookの通知を受け取る場合は、API Endpointを選択します

Okta-SmartHR-005

Security LevelをExpose as WebhookとすることでWebhook用のEndpointにすることができます

Okta-SmartHR-006

フローが保存されていない状態ではInvoke URLやClient Tokenは発行されていないので一度フローを保存しましょう

Flow name(フロー名)、Description(説明)とデバッグ用のデータを保存するにチェックを入れます

Okta-SmartHR-007

フローを保存するとAPI Endpoint Settingsから①Invoke URL②Client Tokenが確認できるようになるので、SmartHR側に入力するために控えておきます

Okta-SmartHR-008

SmartHR:Webhook登録設定


Webhook用のURLとTokenが生成できたので、SmartHR側でWebhookを作成します

SmartHRの共通設定外部システム連携API連携 からWebhookをクリックします

Okta-SmartHR-001

URLにOktaで生成された①Invoke URL、シークレットトークンに②Client Tokenを入力し、送信のトリガーとなるイベントを従業員の更新として登録するをクリックします

Okta-SmartHR-002

これでSmartHR側の設定は完了です

Okta Workflows:Oktaユーザー更新設定


次に先程作成したOkta Workflowsのフローに戻り、Webhookで取得した更新情報を元に対象のOktaユーザーの属性を更新する設定をしていきます

フローは下記のような流れとなります

  1. WebhookでSmartHRの更新情報を受け取る
  2. SmartHRの更新ユーザー情報とOktaユーザーを照合
  3. 更新対象のOktaユーザーの対象の属性をアップデート

まずSmartHRの更新情報がどのような形式で受け取るか確認してみましょう

SmartHRのAPIリファレンスを参照するとCrewオブジェクトの中にemail, lastname, first_name, emp_codeなどが含まれて渡されることが分かります

まずはイベントのAPI Endpointのbodyにobject型でcrewを追加し、その配下にstring型で必要な属性を追加します

SmartHRでカスタム従業員項目を利用していて、Oktaに同期したい場合はcustom_fieldsというオブジェクトをcrewオブジェクトの中に配置する必要があります

Okta-SmartHR-011

次にOktaユーザーとの照合をするために、OktaアプリのRead Userというカードを追加します

InputsはUser ID or Loginで通常はEmailアドレスです

Outputsでチェック欄がありますが、次のアクションで利用する項目を画面上に表示するものです

今回はSystem Properties IDしか使いませんが一旦デフォルトのままでいきましょう

Okta-SmartHR-012

次にOktaユーザーの対象の属性をアップデートするアクションを作成します

OktaアプリのUpdate Userというカードを追加します

Update SemanticsはPartialにすると入力されたフィールドのみ更新されるため、Partialにします

Okta-SmartHR-013

Saveを押すとRead Userと同じようにInputs, Outputsの設定となるので、今回はInputsにて更新する必要があるフィールドをチェックします

Okta-SmartHR-014

Oktaユーザー側に更新させたいフィールドがない場合はUniversal Direcotryの機能のカスタムフィールドを利用して、Attributeを追加することで柔軟なプロファイル構成をとることが可能です

Okta-SmartHR-019

フィールドのマッピング


カードの作成が完了したので、それぞれのフィールドをドラッグ・アンド・ドロップでマッピングしていきます

今回はOktaユーザーのemail、姓、名、社員番号を更新してみたいと思います

API Endpointカード、およびOkta Read Userカードの属性をそれぞれ下記の通りマッピングしていきます

  • [API Endpoint] email →[Okta Read User] ID or Login
  • [API Endpoint] email → [Okta Update User] Username
  • [API Endpoint] last_name → [Okta Update User] Last name
  • [API Endpoint] first_name → [Okta Update User] First name
  • [API Endpoint] emp_code → [Okta Update User] Employee number

Okta-SmartHR-010

  • [Okta Read User] ID → [Okta Update User] ID

Okta-SmartHR-009

以上ですべての設定が完了です!

やってみた


それでは早速試してみましょう

対象のOktaユーザーは根区模太郎さんで、今回は苗字を変更してみます

Okta-SmartHR-015

SmartHR側で苗字を根区から久住に変更しました

Okta-SmartHR-016

するとOktaユーザーはすぐに久住模太郎に変わりました

Okta-SmartHR-017

Okta WorkflowsのFlow HistoryでもFlowが問題なく動作してSuccessとなっていることが確認できます

Okta-SmartHR-018

最後に


OktaとSmartHRの連携をOkta Workflowsを利用してSCIMでは対応していない属性まで同期する方法をご紹介しました

Workflowsは初めてだと見方が難しいと感じることもあるかもしれないですが、かゆいところに手が届く素晴らしいサービスだと今回改めて実感しました

SmartHRだけでなく、APIに対応しているアプリケーションとの連携に応用が可能なので、是非使ってみてはいかがでしょうか