Okta CIC(Auth0)Actions機能アップデート(2023年8月)

はじめに

Okta CIC(Auth0)では、認証認可におけるカスタムロジックを実現するActions機能が提供されています。2023年8月に、以下3点の機能アップデートが行われました。

  • ログインユーザに関するSAML応答カスタマイズ
  • アクセストークンにおけるスコープカスタマイズ
  • 利用可能なユーザ情報の拡張

本ページでは、上記アップデート内容と具体的な設定例をご紹介します。

前提

本ページ記載の機能及び設定に関する内容は、2023年8月現在の情報となります。Actions機能の概要及び基本的な設定方法は、Auth0 Actions機能を利用したトークンカスタマイズ実現をご確認ください。

機能アップデート概要

今回アップデートされた機能は以下の通りです。

  • ログインユーザに関するSAML応答カスタマイズ
    Login FlowのAPI Objectとして、ログインユーザに関するSAML応答のカスタマイズ機能が追加されました。SAML応答への任意の属性追加、NameID形式の指定やSAMLトークンの有効期限等のカスタマイズができます。追加されたAPI Object(api.samlResponse)は、Actions Triggers: post-login - API Object - Auth0 docsをご確認ください。
    なお、Actions機能によるSAML応答カスタマイズには、制限事項があります。詳細は、Actions Limitations - Auth0 docsをご確認ください。
  • アクセストークンにおけるスコープカスタマイズ
    Login FlowのAPI Objectとして、アクセストークンにおけるスコープ追加及び削除機能が追加されました。リクエスト元情報等に応じて、スコープの追加削除ができます。
    追加されたAPI Objectは、api.accessToken.addScope/api.accessToken.removeScopeとなります。詳細は、Actions Triggers: post-login - API Object - Auth0 docsをご確認ください。
  • 利用可能なユーザ情報の拡張
    Actions内で利用可能なユーザ情報の詳細は、Actions Triggers: post-login - Event Object - Auth0 docs(Login Flowの場合)をご確認ください。

設定及び動作例

今回のアップデート機能を利用した設定及び動作例をご紹介します。

設定例①:SAML属性のカスタマイズ

Auth0によるSAML認証実現(Splunk Cloud)で、Rules機能を利用したSAMLレスポンスのカスタマイズをご紹介しました。今回は、同様の処理をActions機能で実現します。

  • Auth0管理画面にて、[Actions] > [Library]をクリック
  • [Build Custom]をクリック
  • 作成するAction名、Actionのトリガ、実行環境を選択し、[Create]をクリック
作成するAction名、Actionのトリガ、実行環境を選択し、[Create]をクリック
4. コードエディタにて、実現するロジックを記載(JavaScript記述)

※必要最低限の処理のみ記載

exports.onExecutePostLogin = async (event, api) => {
	if (event.authorization) {
		api.samlResponse.setAttribute('http://schemas.auth0.com/rolez', event.authorization.roles)
	}
};
5. [Deploy]をクリックし、正常に保存されたことを確認
[Deploy]をクリックし、正常に保存されたことを確認
6. Auth0管理画面にて、[Actions] > [Flows]をクリック
7. 作成したActionを組み込むFlowとして、[Login]を選択
8. 画面右側のCustomタブに表示されるActionの一覧から、対象Actionをドラッグ&ドロップし、画面左側のフロー図に配置
画面右側のCustomタブに表示されるActionの一覧から、対象Actionをドラッグ&ドロップし、画面左側のフロー図に配置
9. [Apply]をクリックし、正常に反映されたことを確認
[Apply]をクリックし、正常に反映されたことを確認

動作例①:SAML属性のカスタマイズ

1. Webブラウザ上の機能を利用し、HARファイルの取得を開始
2. Splunk CloudにてSAMLログイン操作を実施、正常にログインできることを確認
3. Webブラウザ上で取得したHARファイルより、Okta CICからのSAMLレスポンスを取得及びデコード処理
4. SAMLレスポンスにて、Action内で指定した属性及び値が追加されていることを確認
(略)
	<saml:Attribute Name="http://schemas.auth0.com/rolez" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
		<saml:AttributeValue xsi:type="xs:string">
			admin
		</saml:AttributeValue>
	</saml:Attribute>
(略)

設定例②:アクセストークンにおけるスコープカスタマイズ

今回は、アクセス元の国情報と要求先リソースの条件に応じて、アクセストークンのスコープ追加を実現します。
設定例①と同様に、Actionの新規作成及び作成したActionをLogin Flowに組み込みます。

  • コードエディタにて、実現するロジックを記載(JavaScript記述)

※必要最低限の処理のみ記載

exports.onExecutePostLogin = async (event, api) => {
	if (event.request.geoip.countryCode === 'JP' && event.request.query.audience === 'https://example.com') {
		api.accessToken.addScope("read:jp");
	}
};

動作例②:アクセストークンにおけるスコープカスタマイズ

Authorization Code Flowを利用して、作成したActionによるトークンカスタマイズ処理を確認します。必要となる設定は、Auth0におけるAuthorization Code Flow(アクセストークン&IDトークン)をご確認ください。

1. Auth0 /authorizeエンドポイントへ認可コードをリクエスト (Webブラウザで以下URLへアクセス)
https://<YOUR_AUTH0_TENANT_NAME>.<REGION_DOMAIN>.auth0.com/authorize?audience=https://example.com&response_type=code&scope=openid profile email&client_id=Bb9P6WoNhg0XIBnpSNLxd284ChfCxUIq&redirect_uri=https://example.com
2. Auth0による認証画面表示:ユーザ認証を実施
3. 1.で指定したリダイレクト先へ遷移:URLから認可コードを確認
1.で指定したリダイレクト先へ遷移:URLから認可コードを確認
> curl -X POST --url 'https://<YOUR_AUTH0_TENANT_NAME>.<REGION_DOMAIN>.auth0.com/oauth/token' --header 'content-type: application/x-www-form-urlencoded' --data 'grant_type=authorization_code&client_id=Bb9P6WoNhg0XIBnpSNLxd284ChfCxUIq&client_secret=quS8KFlWCT7UUtOdHvzIMKaip72Ut2dy0KgQproakBP9hXh4_yxixB1d5u_L4MKN&code=LfsgBMfG4Gs_TxysEr_6yXREFb2W10a0UrL9VIwEzZpjz&redirect_uri=https://example.com'
4. Auth0 /oauth/tokenエンドポイントにアクセスし、アクセストークンを取得
> curl -X POST --url 'https://<YOUR_AUTH0_TENANT_NAME>.<REGION_DOMAIN>.auth0.com/oauth/token' --header 'content-type: application/x-www-form-urlencoded' --data 'grant_type=authorization_code&client_id=Bb9P6WoNhg0XIBnpSNLxd284ChfCxUIq&client_secret=quS8KFlWCT7UUtOdHvzIMKaip72Ut2dy0KgQproakBP9hXh4_yxixB1d5u_L4MKN&code=LfsgBMfG4Gs_TxysEr_6yXREFb2W10a0UrL9VIwEzZpjz&redirect_uri=https://example.com'

取得結果 (スコープ追加を確認)

{
	"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6Ikp...(略)...uddoylYsMiU_cxfgUXQ",
	"id_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVC...(略)...reTo69XG_wKEv3otwug",
	"scope":"openid profile email read:jp",
	"expires_in":86400,
	"token_type":"Bearer“
}
5. 取得したアクセストークンを確認 ※jwt.ioにてアクセストークンをデコード
アクセストークンのデコード結果 (スコープ追加を確認)
{
	"iss": "https://<YOUR_AUTH0_TENANT_NAME>.<REGION_DOMAIN>.auth0.com/",
	"sub": "auth0|642637dc3d0fd8dd93fedd90",
	"aud": [
		"https://example.com",
		"https://<YOUR_AUTH0_TENANT_NAME>.<REGION_DOMAIN>.auth0.com/userinfo"
	],
	"iat": 1694236566,
	"exp": 1694322966,
	"azp": "Bb9P6WoNhg0XIBnpSNLxd284ChfCxUIq",
	"scope": "openid profile email read:jp"
}

おわりに

今回は、Actions機能のアップデートをご紹介しました。Rules/Hooks機能に関するEOL(End of Life)アナウンスが出ておりますので、Actions機能で実現可能となる処理は、今後も追加されていくと予想されます。

実施されるアップデートに応じて、今後も随時情報更新していきたいと思います。

参考

お問い合わせ・資料請求

株式会社マクニカ  Okta 担当

月~金 8:45~17:30