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

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 構築手順(Salesforce編)

はじめに

外部認証サーバを利用したAPIのOAuth認証を構築する機会があったので手順について説明する。

目次

  1. SFDC:接続アプリケーションを作成する
  2. SFDC:APIキーを生成する
  3. Mule:クライアントプロバイダーを設定する
  4. Mule:API仕様を設定する
  5. Mule:環境へクライアントプロバイダーを割り当てる(省略)
  6. Mule:APIインスタンスへクライアントプロバイダーを割り当てる(省略)
  7. Mule:OpenId Connect access token enforcement Policyを設定する
  8. Mule:アクセスリクエストを登録する
  9. POSTMANで操作を確認する

詳細

参考資料

MuleSoft公式ヘルプ:クライアントプロバイダ設定方法

SFDC公式ヘルプ:初期アクセストークンの生成

SFDC公式:外部 API ゲートウェイの OpenID Connect 動的クライアント登録

1.SFDC:接続アプリケーションを作成する

クライアントプロバイダー用の接続アプリケーションを作成する。
[設定] > [アプリケーションマネージャ] > [接続アプリケーション] をクリックする。

接続アプリケーションを設定する。

[すべてのトークンを調査]にチェックをする。

2.SFDC:APIキーを生成する

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

下記のアドレスにアクセスするとクライアントプロバイダーで必要な情報が確認できる。
“https://<私のドメイン名>-dev-ed.my.salesforce.com/.well-known/openid-configuration”

下記の赤枠の部分に設定する。

テンプレートとして参考の設定は以下の通り。

Name: SFDC OIDC Provider
Description: SFDC OIDC Provider
Issuer: https://dev30-masakikawaguchi-dev-ed.my.salesforce.com
Client Registration URL: https://dev30-masakikawaguchi-dev-ed.my.salesforce.com/services/oauth2/register
Authorization Header: Bearer xxxxx00D5h000005QVZG8885h000001AsOyFkF2Mzk1ZAl7jyI08EYz4SHy5sEAGpZ1vlF0VCxbLNmVqKC7mmKvcbUstoxUF7GXxuwDzb0r
Authorize URL: https://dev30-masakikawaguchi-dev-ed.my.salesforce.com/services/oauth2/authorize
Token URL: https://dev30-masakikawaguchi-dev-ed.my.salesforce.com/services/oauth2/token
Token Introspection URL: https://dev30-masakikawaguchi-dev-ed.my.salesforce.com/services/oauth2/introspect

4.Mule:API仕様を設定する

RAMLに登録するSecuritySchemeの設定は以下の通り。

#%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.
securitySchemes:
  oauth2: !include securityScheme.raml
securedBy:
  - oauth2

7.Mule:OpenId Connect access token enforcement Policyを設定する

OAuth2.0スコープとクライアントIDが利用できないため下記の設定にする。

8.Mule:アクセスリクエストを登録する

クライアントアプリケーションを作成する場合は、APIインスタンスで設定したクライアントプロバイダーの作成画面が表示される。

SFDC用のクライアントプロバイダーの作成画面。SFDCがサポートするGrantTypeのみ表示される。

Muleのクライアントアプリケーションを登録すると、SFDCの接続アプリケーションも作成される。

9.POSTMANで操作を確認する

SFDCでMuleのクライアントアプリケーションのクライアントIDとシークレットを利用して、アクセストークンを取得する。

URL: https://<MyDomain>.my.salesforce.com/services/oauth2/token
HTTP Method: POST
Request: 
  grant_type: password
  client_id: <クライアントパプリケーションのクライアントID>
  client_secret: <クライアントパプリケーションのクライアントシークレット>
  username: <SFDCユーザID>
  password: <SFDCユーザパスワード>

アクセストークンをSFDCのトークン検証エンドポイントで検証した結果、クライアントIDとスコープが設定されてないことが確認できる。

URL: https://<MyDomain>.my.salesforce.com/services/oauth2/introspect
HTTP Method: POST
Request: 
  token: <Access Token>
  client_id: <1.の接続アプリケーションのクライアントID>
  client_secret: <1.の接続アプリケーションのクライアントシークレット> 

SFDCの認証で発行したアクセストークンを利用してMuleのAPIのレスポンスを受け取ることができた。

付録)クライアントアプリケーションは削除できない。

さいごに

SFDCを外部認証サーバとして利用したOIDCポリシーの設定方法にいて紹介しました。
ぜひ、検証の際はご利用ください。では、