Okta Expression Languageとイベントフック
早期アクセスリリース。「セルフサービス機能を有効にする」を参照してください。
Okta Expression Language(EL)式を使用して、Oktaイベントフックをトリガーする特定のイベントのみを識別します。イベントフックを作成または変更する際に、Okta EL式を使用して次のタスクを実行できます。
-
イベントフックによってトリガーされるイベントのサブセットを許可するフィルターを定義する。
-
イベントフックを処理する外部Webサービスに対するノイズを低減する。
Okta ELの詳細については、「Okta Expression Languageの概要」を参照してください。
構成情報
-
イベントフックのフィルターを定義する際、式がブール値として評価されることを確認してください。
-
簡単な式から始めて、徐々に条件を追加してください。このアプローチは、式が期待通りに動作することを確認するのに役立ちます。
サポートされるフィルターフィールド
イベントフックでは、以下のフィールドのデータのみに基づいてイベントをフィルターできます。
サポートされるフィールド(シンプルなUI) |
サポートされるフィールド(式言語) |
---|---|
eventType |
event.eventType |
outcome.reason |
event.outcome.reason |
outcome.result |
event.outcome.result |
actor.id |
event.actor.id |
actor.type |
event.actor.type |
actor.alternateId |
event.actor.alternateId |
actor.displayName |
event.actor.displayName |
changedAttributes |
event.debugData.changedAttributes |
target.id |
event.target.?[id ] |
target.type |
event.target.?[type ] |
target.alternateId |
event.target.?[alternateId ] |
target.displayName |
event.target.?[displayName ] |
演算子
-
eqは等値演算子を示します。
-
neは非等値演算子を示します。
-
&&はAnd演算子を示します。
-
||はOr演算子を示します。
グループ条件を定義する
Okta ELを使用して、イベントフックをアクティブ化できるグループのリストを定義します。式がブール値で評価されることを確認します。グループを含める場合はTrue、イベントフックをアクティブしない場合はFalseです。
次の例では、Okta ELを使用して、Salesというグループのイベントフックをアクティブ化します。
event.target.?[type eq 'UserGroup' && displayName eq 'Sales'].size()> 0
...
"target": [
{
"id": "00gsnc3qy7Uy6JZfy0h7",
"type": "UserGroup",
"alternateId": "unknown",
"displayName": "Sales"
}
],
...
グループ条件では次のイベントタイプを使用します。
-
group.user_membership.add
-
group.user_membership.remove
-
group.lifecycle.create
-
group.lifecycle.delete
-
group.profile.update
-
group.privilege.revoke
-
group.privilege.grant
-
system.import.group.create
-
system.import.group.delete
Sample expressions(式のサンプル)
ユースケース | 式のサンプル |
---|---|
特定のグループ名のイベントフックをアクティブ化する | event.target.?[type eq 'UserGroup' && displayName eq 'Sales'].size()> 0 || event.target.?[type eq 'UserGroup' && displayName eq 'Marketing'].size()> 0 |
特定のグループIDのイベントフックをアクティブ化する | event.target.?[type eq 'UserGroup' && id eq '00gsnc3qy7Uy6JZfy0h7'].size()> 0 || event.target.?[type eq 'UserGroup' && id eq '032gs2nc3qy7Uy6JZfasd3'].size()> 0 |
ユーザー属性とグループの組み合わせを使用して、特定のユーザーが特定のグループに追加されるタイミングを含む複雑な式を定義します。 | event.target.?[type eq 'User' && id eq '00usnkgbd0FFDxYaj0h7'].size()>0 && event.target.?[type eq 'UserGroup' && displayName eq 'Admin'].size()> 0 |
アプリケーション条件を定義する
Okta ELを使用して、イベントフックをアクティブ化できるアプリケーションのリストを定義します。式がブール値で評価されることを確認します。アプリケーションを含める場合はTrue、イベントフックをアクティブ化しない場合はFalseです。
次の例では、Okta ELを使用して、My COMPANY Bookmark Appという名前のブックマークアプリケーションのイベントフックをアクティブ化します。
event.target.?[type eq 'AppInstance' && alternateId eq 'My COMPANY Bookmark App'].size()> 0
...
"target": [
{
"id": "0oat26meilfdn0Em90h7",
"type": "AppInstance",
"alternateId": "MY COMPANY Bookmark App",
"displayName": "Bookmark App"
},
...
アプリケーション条件では次のイベントタイプを使用します。
-
application.lifecycle.create
-
application.lifecycle.update
-
application.lifecycle.delete
-
application.lifecycle.activate
-
application.lifecycle.deactivate
-
application.user_membership.add
-
application.user_membership.remove
-
application.user_membership.change_password
-
application.provision.user.sync
-
app.oauth2.as.consent.grant
Sample expressions(式のサンプル)
ユースケース | 式のサンプル |
---|---|
特定のアプリケーション名のイベントフックをアクティブ化する | event.target.?[type eq 'AppInstance' && alternateId eq 'My Company Bookmark App'].size()> 0 || event.target.?[type eq 'AppInstance' && alternateId eq 'My OIDC App'].size()> 0 |
特定のアプリケーションIDのイベントフックをアクティブ化する | event.target.?[type eq 'AppInstance' && id eq '00gsnc3qy7Uy6JZfy0h7'].size()> 0 || event.target.?[type eq 'AppInstance' && id eq '032gs2nc3qy7Uy6JZfasd3'].size()> 0 |
ユーザー属性とグループの組み合わせを使用して、特定のユーザーが特定のアプリケーションに追加されるタイミングを含む複雑な式を定義します。 | event.target.?[type eq 'User' && id eq '00usnkgbd0FFDxYaj0h7'].size()>0 && (event.target.?[type eq 'AppInstance' && alternateId eq 'My Admin App'].size()> 0 |
ユーザープロファイル条件を定義する
Okta ELを使用して、イベントフックをアクティブ化するユーザープロファイル属性のリストを定義します。式がブール値で評価されることを確認します。アプリケーションを含める場合は True、イベントフックをアクティブ化しない場合はFalseです。
次の例では、Okta ELを使用して、メールが更新されたユーザーのイベントフックをアクティブ化します。
event.debugData.changedAttributes.contains('email')
..
"debugContext": {
"debugData": {
"requestId": "XyMjlc1OvvWkZPMA7QazbwAAFIs",
"threatSuspected": "false",
"requestUri": "/api/v1/users/00ut27as6fbC0K3rS0h7",
"changedAttributes": "email",
"targetEventHookIds": "whot1dekaabE2suVh0h7",
"url": "/api/v1/users/00ut27as6fbC0K3rS0h7?"
}
},
...
以下は、プロファイル条件の最も一般的なイベントタイプを表しています。
-
user.account.update_profile
Sample expressions(式のサンプル)
ユースケース | 式のサンプル |
---|---|
特定のユーザープロファイル属性が更新されたときにイベントフックをアクティブ化する | event.debugData.changedAttributes.contains('email') || event.debugData.changedAttributes.contains('manager') || event.debugData.changedAttributes.contains('department') |
サインイン条件を定義する
Okta ELを使用して、イベントフックをアクティブ化する特定のサインイン条件を定義します。式がブール値で評価されることを確認します。アプリケーションを含める場合はTrue、イベントフックをアクティブ化しない場合はFalseです。
このリストには、利用可能な結果のオプション(SUCCESS、FAILURE、SKIPPED、UNKNOWN、CHALLENGE、DENY)が表示されます。
次の例では、Okta ELを使用して、ユーザーサインインの成功イベントのイベントフックをアクティブ化します。
event.outcome.result eq'SUCCESS'
次の例では、Okta ELを使用して、ユーザーサインインの失敗イベントのイベントフックをアクティブ化します。
event.outcome.result eq'FAILURE'
以下は、サインイン条件の最も一般的なイベントタイプを表しています。
-
user.session.start
Sample expressions(式のサンプル)
ユースケース | 式のサンプル |
---|---|
サインインの成功イベントフックをアクティブ化する | event.outcome.result eq 'SUCCESS' |
サインインの失敗イベントのイベントフックをアクティブ化する |
event.outcome.result eq 'FAILURE' |
特定のユーザーのメールアドレスのイベントフックをアクティブ化する |
event.actor.alternateId eq 'myAdmin@company.com' |
特定のユーザーIDのイベントフックをアクティブ化する |
event.actor.id eq '00usnkgbd0FFDxYaj0h7' |
特定のユーザーの失敗したサインイン試行に対するイベントフックをアクティブ化する |
event.actor.alternateId eq 'myAdmin@company.com' && event.outcome.result eq 'FAILURE' |
MFA要素条件を定義する
Okta ELを使用して、イベントフックをアクティブ化できるMFA要素のリストを定義します。式がブール値で評価されることを確認します。アプリケーションを含める場合はTrue、イベントフックをアクティブ化しない場合はFalseです。
次の例では、秘密の質問がMFA要素として設定されている場合に、Okta ELを使用してイベントフックをアクティブ化します。
event.outcome.reason.contains( 'SECURITY_QUESTION')
要素条件では次のイベントタイプを使用します。
-
user.mfa.factor.activate
-
user.mfa.factor.deactivate
Sample expressions(式のサンプル)
ユースケース | 式のサンプル |
---|---|
特定のMFA要素設定のイベントフックをアクティブ化する。使用可能な要素タイプは次のとおりです。
|
event.outcome.reason.contains('SECURITY_QUESTION') |