Mule OpenID Connect OAuth 2.0 Token Enforcement Policy 構築手順(Okta編)

Stay hungry. Stay foolish. Your time is limited, so don't waste it living someone else's life.

Mule OpenID Connect OAuth 2.0 Token Enforcement Policy 構築手順(Okta編)

はじめに

 Oktaを利用してMule APIの認証を構築する機会があったので、構築手順について説明する。

構築手順

構築の手順は以下の通り。

  1. Okta:API Tokenを発行する。
  2. Okta:Muleのクライアントプロバイダー用の接続アプリケーションを登録する。
  3. Okta:カスタムスコープを作成する。
  4. Mule:クライアントプロバイダーを設定する。
  5. Mule:環境にMuleのクライアントプロバイダーを割り当てる。
  6. Mule:RAMLにOAuth 2.0のセキュリティスキーマを設定する。
  7. Mule:APIインスタンスにクライアントプロバイダーを割り当てる。
  8. Mule:APIインスタンスにOICD用トークン検証ポリシーを割り当てる。

ユーザのAPI利用手順は以下の通り。

  1. Mule:APIのアクセスリクエストで接続アプリケーションを登録する。
  2. Okta:連携された接続アプリケーションにユーザを割り当てる。
  3. POSTMAN:OktaのOAuth認証を設定する。
  4. POSTMAN:OIDCトークン検証ポリシーの動作を確認する。

手順詳細

Oktaトライアル環境払い出し

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

MuleSoft公式ヘルプ:OpenID Connect OAuth 2.0 トークン適用

Okta公式ヘルプ:認証・認可関連のエンドポイントリファレンス