Mule OpenID Connect OAuth 2.0 Token Enforcement Policy 構築手順(Okta編)
はじめに
Oktaを利用してMule APIの認証を構築する機会があったので、構築手順について説明する。
構築手順
構築の手順は以下の通り。
- Okta:API Tokenを発行する。
- Okta:Muleのクライアントプロバイダー用の接続アプリケーションを登録する。
- Okta:カスタムスコープを作成する。
- Mule:クライアントプロバイダーを設定する。
- Mule:環境にMuleのクライアントプロバイダーを割り当てる。
- Mule:RAMLにOAuth 2.0のセキュリティスキーマを設定する。
- Mule:APIインスタンスにクライアントプロバイダーを割り当てる。
- Mule:APIインスタンスにOICD用トークン検証ポリシーを割り当てる。
ユーザのAPI利用手順は以下の通り。
- Mule:APIのアクセスリクエストで接続アプリケーションを登録する。
- Okta:連携された接続アプリケーションにユーザを割り当てる。
- POSTMAN:OktaのOAuth認証を設定する。
- POSTMAN:OIDCトークン検証ポリシーの動作を確認する。
手順詳細
1.Okta:API Tokenを発行する。
MuleSoftのクライアントアプリケーションの作成時に、Oktaにクライアントを作成するためのAPIトークンを発行する。
サイドメニュ[Security] > [API]をクリックして、[API]画面の[Create Tokens]ボタンをクリックする。

Tokenの名前は、任意だが今回は”MuleSoft AP Token”とした。

発行されたAPI トークンの値をメモする。

2.Okta:Muleのクライアントプロバイダー用の接続アプリケーションを登録する。
Muleのクライアントプロバイダー設定で利用する接続アプリケーションを登録する。
サイドメニュー[Applications] > [Applications]をクリックして、[Applications]画面の[Create App Integration]ボタンをクリックする。

システム間認証用の[API Services]を選択する。

クライアントアプリケーションの名前は、任意で今回は”MuleSoft AP Client”とした。

クライアント認証用のクライアントIDとクライアントシークレットが発行される。
Muleのクライアントプロバイダーの設定で利用するためメモする。

3.Okta:カスタムスコープを作成する。
OICDアクセストークンポリシーのスコープで利用するカスタムスコープを作成する。
サイドメニュー[Security] > [API]をクリックし、[API]画面の[Authorization servers] > [default]リンクをクリックする。次に、[default]画面の[Scopes]タブをクリックする。

スコープの名前は、任意だが今回は”mule-api”とした。

作成されていることを確認する。

4.Mule:クライアントプロバイダーを設定する。
Muleのクライアントプロバイダーを設定する。

Muleのクライアントプロバイダーの設定は、OktaのMetadataURIを参照して設定する。

赤枠の部分をOktaのMetadata URIの情報を参照して設定する。
[issuer]と[registration_endpoint]、[authorization_endpoint]、[token_endpoint]、[introspection_endpoint]をメモする。

MuleSoftのサイドメニューの[Access Management] > [Client Provider]をクリックし、[Client Provider]画面の[Add Client Provider] > [OpenID Connect Dynamic Client Registration]を選択する。
[Authorization Header]には、1. で発行した[API Token]を設定する。
Authorization Header : SSWS xxxxxxxxxx4HVSg9bK8iYMXav3NojtS5E_2iJ6VZ2s
赤枠の部分をOktaのMetadata URIの情報を参照して設定する。


5.Mule:環境にMuleのクライアントプロバイダーを割り当てる。
環境にクライアントプロバイダーを割り当てる。

環境にはクライアントプロバイダーを複数割り当てることができる。

6.Mule:RAMLにOAuth 2.0のセキュリティスキーマを設定する。
OAuth認証用のヘッダー定義を設定する。

–
OAuth認証用のセキュリティースキーマを登録する。

OAuth認証のセキュリティースキーマの設定は以下の通り。
#%RAML 1.0 SecurityScheme
type: OAuth 2.0
description: Apply theOAuth 2.0 security policy to resource methods for authenticating API requests
describedBy:
headers:
Authorization:
description: |
Used to send a valid OAuth 2 access token.
type: string
responses:
401:
description: |
Bad or expired token. This can happen if the API consumer uses a revoked or expired access toke. To fix, you should re-authenticate the user.
403:
description: |
Bad OAuth request (wrong consumer key, bad nonce, expired timestamp...). Unfortunately, re-authenticating the user won't help here.
取引先取得APIのRAMLにOAuth認証のセキュリティースキーマと追加する。

securitySchemes:
oauth2: !include securityScheme.raml
securedBy:
- oauth2
Exchange に公開する。
7.Mule:APIインスタンスにクライアントプロバイダーを割り当てる。
OAuth用のセキュリティースキーマを追加したRAMLを選択しAPIインスタンスを作成する。

APIインスタンスにクライアントプロバイダーを割り当てる。

Autodiscoveryの設定
anypoint.platform.client_id=3756d2c9dd5147d7bc479b12b0558a1e
anypoint.platform.client_secret=5e4dB2C8d0F24325B17071FD8eBa3B67
8.Mule:APIインスタンスにOICD用トークン検証ポリシーを割り当てる。
API ManagerでAPIインスタンスにOICDトークン検証ポリシーを割り当てる。
APIインスタンスにクライアントプロバイダーを設定するとOICDアクセストークン検証ポリシーが表示される。

OICDのポリシーの設定は以下の通り。
Oktaではトークンの検証エンドポイントの検証結果にOAuth2.0スコープとクライアントIDが含まれるため下記の設定ができる。

下記の設定を登録する。

9.Mule:APIのアクセスリクエストで接続アプリケーションを登録する。
APIのアクセスリクエストを登録する。

アクセスリクエスト登録時に、接続アプリケーションを登録する。

接続アプリケーション登録時に、OktaがサポートしているGrantTypeが選択できる。
クライアント認証にする場合も、[Authorization Code Grant]の選択は必須。
[Application Name]は、任意で”Account Potal Client”とした。

接続アプリケーションのクライアントIDとクライアントシークレットが発行される。

11.Okta:連携された接続アプリケーションにユーザを割り当てる。
連携された接続アプリケーションに、OktaのOAuth認証で利用するユーザを割り当てる。

接続アプリケーションに、OAuth認証で利用するユーザを割り当てる 。
ここでは、[Everyone]グループを割り当てることで全てのユーザを割り当てることができる。

個別に割り当てるか、グループに割り当てられるか選択できる。

[Everyone]グループの[Assign]ボタンを押下する。

グループに所属するユーザが割り当てられていることが確認できる。

12.POSTMAN:OktaのOAuth認証を設定する。
まずは、[Authorization Code]のGrantTypeでユーザベースの認証でアクセストークンを取得する。
[Authorization] > [Configure New Token]画面でOktaのOAuth設定する。

Muleの接続アプリケーションの登録で発行されたクライアントIDとシークレットを設定する。

GrantType: Authorization Code
CallbackURL: https://www.accenture.com/oauth2/callback
Authorize using browser: false
AuthURL: https://trial-XXX2380.okta.com/oauth2/default/v1/authorize
AccessTokenURL: https://trial-XXX2380.okta.com/oauth2/default/v1/token
ClientID: XXXX <クライアントアプリケーションのクライアントID>
ClientSecret: XXXXX <クライアントアプリケーションのクライアントシークレット>
Scope: mule-api
State: 1234
ClientAuthentication: Send client credentials in body
クライアント認証の設定は以下の通り。
GrantType: Client Credentials
URL: https://trial-9362380.okta.com/oauth2/default/v1/token
HTTPMethod: POST
Request:
grant_type: client_credentials
scope: mule-api
client_id: XXXX <クライアントアプリケーションのクライアントID>
client_secret: XXXXX <クライアントアプリケーションのクライアントシークレット>
13.POSTMAN:OIDCトークン検証ポリシーの動作を確認する。
OAuth認証で取得したアクセストークンで、OICDアクセストークン検証ポリシーを割り当てたAPIにアクセスすると、正しいアクセストークンであると判断されて正常な値が返却される。

不正なアクセストークンが設定された場合は、下記のエラーが返却される。

Oktaのトークン検証用APIにアクセスして、検証の結果を確認する。

URL: https://trial-9362380.okta.com/oauth2/default/v1/introspect
HTTPMethod: POST
Request:
token: <アクセストークン>
token_type_hint: access_token
client_id: <1.の接続アプリケーションのクライアントID>
client_secret: <1.の接続アプリケーションのクライアントシークレット>
付録)クライアントアプリケーションは削除できない。
Muleのクライアントアプリケーションを削除しようとすると下記のエラーが発生する。


さいごに
いかがだったでしょうか?
OpenID connector ポリシーの動きを確認しました。
是非、活用してみてください。では、
参考資料
MuleSoft 公式ヘルプ:Client Provider






