JWTを利用してSalesforceからMuleSoftのAPIを呼び出そう!
はじめに
Webアプリケーションの標準仕様となっているJWTを利用して、SalesforceからMuleSoftの公開APIに接続する場合の仕組みや制限事項を調査しました。ざっと、調べた内容を並べたので見にくくてすいません。
JWTの概要
JWTの概要は以下の通りです。今回の検証では署名のみの検証パターンで検証しました。
外部サービスの概要(API呼び出しに利用)
外部サービスを利用したJWTの制約事項
外部サービスを利用した場合のJWTの制約事項は以下の通りです。
Apexを利用したJWTの考慮事項
署名アルゴリズムの特徴
認証アルゴリズムの特徴をまとめました。SalesforceではRSAが固定です。
SalesforceとMule間のJWTの署名と検証の仕組み
SalesforceとMuleSoft間の署名と検証の仕組みは以下の通りです。
検証までの設定手順
ポリシーと互換性があるPEM公開キーの取得
キーストアの作成
$keytool -genkeypair -keystore keydir/keystore.jks -dname "CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown" -keypass password -storepass password -keyalg RSA -sigalg SHA1withRSA -keysize 2048 -alias mule -ext SAN=DNS:localhost,IP:127.0.0.1 -validity 9999
公開鍵と非公開鍵の作成
$keytool -importkeystore -srckeystore keydir/keystore.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore keydir/keystore.p12
$openssl pkcs12 -in keydir/keystore.p12 -nokeys -out keydir/cert.pem
$openssl x509 -inform pem -in keydir/cert.pem -pubkey -noout > keydir/public.pem
$openssl pkcs12 -in keydir/keystore.p12 -nodes -nocerts -out keydir/key.pem
SalesforceのJWTトークン
MuleSoftのログからJWTトークンを取得し、JWT Debuggerで内容を可視化しました。
検証結果(外部サービス)
アクションコンポーネントのメニューから対象のAPIを設定し配置することで、簡単に呼出しが可能です。
検証結果(Apex)
指定ログインの設定も合わせて、JWTトークンを任意の場所に設定することやプライベートクレームを設定もできます。
public class MuleCallOut {
public static String getCalloutResponseContents(Boolean flg) {
String url = 'callout:MuleClientA/{uri_parameter}';
if (flg) {
url = 'callout:MuleClientB/{uri_parameter}';
}
Http h = new Http();
HttpRequest req = new HttpRequest();
req.setHeader('jwt', '{!$Credential.AuthorizationHeaderValue}');
req.setEndpoint(url);
req.setMethod('GET');
// Send the request, and return a response
HttpResponse res = h.send(req);
System.debug('>>> Header.Authorization :: ' + req);
System.debug('>>> getBody :: ' + res.getBody());
return res.getBody();
}
}
MessageLoggingポリシーを利用したJWTの確認方法
MessageLoggingポリシーを利用してJWTの内容をログに出力できます。base64でエンコードされていますので、コアのライブラリのメソッドを指定してデコードします。
#[dw::core::Binaries::fromBase64((((attributes.headers["jwt"] as String) splitBy("."))[1]) as String)]
まとめ
JWTトークンを利用してSalesforceからMuleSoftの公開APIの読み出しを検証しました。
検証により、JWTの仕組みや制限事項が明確になり、ApexやMule実装に必要処理やキーストアが必要な理由についても理解できたと思います。
お客様との打ち合わせで、要件に合わせて何ができて何ができないのかトレードオフについて「サラっ」とこたえられるようになったら素敵ですね。
では!
Author And Source
この問題について(JWTを利用してSalesforceからMuleSoftのAPIを呼び出そう!), 我々は、より多くの情報をここで見つけました https://qiita.com/SevenstarsRock/items/99d9df24a2c523a3d058著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .