概要とビジネスシーン
Connected Apps は、Salesforce と外部アプリケーションの間でセキュアな認証と認可のフレームワークを提供するSalesforceの強力な機能です。OAuth 2.0 や OpenID Connect などの標準プロトコルを基盤とし、外部システムが Salesforce のデータや機能に安全にアクセスするためのゲートウェイとしての役割を果たします。
実際のビジネスシーン
シーンA - 小売業:ある大手小売業では、顧客がECサイトで購入した商品の配送状況を Salesforce の Service Cloud に連携し、顧客対応を迅速化したいと考えています。従来のバッチ処理ではリアルタイム性に欠け、API連携はセキュリティ上の懸念がありました。
- ビジネス課題:ECサイトの注文データを Salesforce にリアルタイムかつセキュアに連携し、顧客対応の品質と効率を向上させること。
- ソリューション:ECサイトアプリケーションを Connected App として登録し、OAuth 2.0 Web Server Flow を使用して、ECサイトから Salesforce API を介して注文データを同期します。
- 定量的効果:顧客対応の平均応答時間が 30% 短縮され、顧客満足度が 15% 向上しました。手動でのデータ入力作業がほぼゼロになり、オペレーションコストが削減されました。
シーンB - 製造業:IoT デバイスから収集される稼働データを Salesforce Field Service に連携し、予知保全を強化したい製造業企業があります。数万台のデバイスからのデータをセキュアに認証し、Salesforce に取り込む必要がありました。
- ビジネス課題:膨大な数の IoT デバイスからのデータを Salesforce にセキュアに連携し、デバイスの異常を早期に検知してメンテナンスコストを削減すること。
- ソリューション:各 IoT デバイスを識別するための Connected App を作成し、OAuth 2.0 JWT Bearer Flow を利用して、デバイスが直接 Salesforce API にアクセスできるように設定します。これにより、ユーザーインタラクションなしで安全な認証を実現します。
- 定量的効果:デバイスの故障率が 20% 低減し、予知保全によるメンテナンスコストが 10% 削減されました。データ連携の遅延が解消され、リアルタイムな状況把握が可能になりました。
シーンC - SaaS企業:自社が開発するモバイルアプリケーションから Salesforce の顧客データにアクセスし、営業担当者が外出先でも最新情報を確認・更新できるようにしたい SaaS 企業があります。
- ビジネス課題:自社モバイルアプリから Salesforce の顧客データにセキュアにアクセスし、営業担当者の生産性を向上させること。
- ソリューション:モバイルアプリケーションを Connected App として登録し、OAuth 2.0 User-Agent Flow または OAuth 2.0 Authorization Code Flow with PKCE を利用して、モバイルアプリユーザーが Salesforce に安全にログインし、データにアクセスできるようにします。
- 定量的効果:営業担当者のモバイルアプリ利用率が 40% 向上し、外出先でのデータ更新により顧客訪問後のタスク完了時間が 25% 短縮されました。
技術原理とアーキテクチャ
Connected Apps は、主に OAuth 2.0 フレームワークに基づいて動作します。これは、外部アプリケーション(クライアント)がユーザーに代わって、ユーザーの認証情報(パスワードなど)を知ることなく、限定された権限で Salesforce(リソースサーバー)のリソースにアクセスすることを許可するプロトコルです。Salesforce はこのコンテキストにおいて「認可サーバー」の役割も果たします。
主要コンポーネント
- Consumer Key (Client ID):Connected App を一意に識別する公開キー。
- Consumer Secret (Client Secret):Connected App の秘密キー。認証リクエストの際にクライアント認証のために使用されます。
- Callback URL (Redirect URI):OAuth フロー完了後に、Salesforce が認可コードやアクセストークンを送信するエンドポイント。
- Selected OAuth Scopes:外部アプリケーションが Salesforce のどのデータや機能にアクセスできるかを定義する権限のセット(例:
api、refresh_token、full)。 - IP Relaxation:アクセストークンを使用できる IP アドレスの範囲を制限するかどうかを指定します。
- Permitted Users:Connected App を使用できるユーザーを制御するポリシー(例:管理者承認済みユーザー、全ユーザー)。
- Refresh Token Policy:リフレッシュトークンの有効期限と、アクセストークンとの関連付けを定義します。
データフロー:OAuth 2.0 Web Server Flow (概要)
外部アプリケーションが Salesforce API にアクセスする最も一般的なフローの一つです。ユーザーのブラウザを通じて認可コードを受け取り、それをアクセストークンに交換します。
| ステップ | 説明 | 送信元 | 送信先 |
|---|---|---|---|
| 1. 認可リクエスト | 外部アプリがユーザーを Salesforce ログインページにリダイレクト。client_id, redirect_uri, response_type=code, scope を指定。 |
外部アプリ | Salesforce 認可エンドポイント |
| 2. ユーザー認証・認可 | ユーザーが Salesforce にログインし、外部アプリへのアクセスを承認。 | ユーザー | Salesforce ログインページ |
| 3. 認可コード付与 | Salesforce が redirect_uri に認可コード(code)を付けてリダイレクト。 |
Salesforce | 外部アプリの redirect_uri |
| 4. アクセストークン要求 | 外部アプリが認可コード、client_id, client_secret, redirect_uri を Salesforce トークンエンドポイントに POST リクエストで送信。 |
外部アプリ | Salesforce トークンエンドポイント |
| 5. アクセストークン付与 | Salesforce がアクセストークン(access_token)、リフレッシュトークン(refresh_token)、インスタンスURLなどを JSON 形式で応答。 |
Salesforce | 外部アプリ |
| 6. リソースアクセス | 外部アプリがアクセストークンを Bearer トークンとして使用し、Salesforce API にリクエストを送信。 | 外部アプリ | Salesforce API |
ソリューション比較と選定
| ソリューション | 適用シーン | パフォーマンス | Governor Limits | 複雑度 |
|---|---|---|---|---|
| Connected Apps | 外部アプリケーション(Webアプリ、モバイルアプリ、IoTデバイス)が Salesforce にアクセスする際の認証・認可。SSOの実現。 | OAuthフローの初回オーバヘッドがあるが、その後はアクセストークンで効率的。APIコールは標準APIレートに依存。 | APIコール数制限、リフレッシュトークンポリシー。 | OAuth/OpenID Connect の深い理解が必要。設定は Salesforce UI で比較的容易。 |
| Named Credentials | Salesforce 内部(Apex Callout、外部サービスなど)から外部システムへのコールアウト。認証情報(APIキー、ユーザー名/パスワード、OAuth)を Salesforce にセキュアに保存。 | 認証情報が Salesforce に保存されるため、Connected App を直接利用するよりシンプル。APIコールは Apex Callout 制限に依存。 | Apex Callout 制限 (ヒープサイズ、コールアウト時間、同時コールアウト数)。 | 設定は非常に容易。OAuth 2.0 を利用する場合も自動でトークン管理されるため、開発者は意識が少ない。 |
| API Gateway (MuleSoft, Azure APIMなど) | Salesforce を含む複数のシステム間の複雑な統合ロジック、データ変換、ルーティング、API管理、セキュリティ強化。 | Gateway 自体の処理能力とスケーラビリティに依存。Salesforce APIへのアクセスは Gateway 経由となる。 | Gateway が Salesforce API を呼び出すため、Salesforce APIコール数制限は Gateway に適用。 | Gateway の導入、設定、運用が必要。より高度なインテグレーションパターンに適している。 |
Connected Apps を使用すべき場合:
- ✅ 外部 Web アプリケーションやモバイルアプリケーションが Salesforce API にセキュアにアクセスする必要がある場合。
- ✅ Salesforce を IdP(Identity Provider)として利用し、外部アプリケーションへのシングルサインオン(SSO)を実現したい場合。
- ✅ IoT デバイスやサーバーサイドアプリケーションなど、ユーザーインタラクションなしで Salesforce にアクセスするケース(JWT Bearer Flow)。
- ❌ Salesforce から外部システムへの単純な API コールアウトを設定する場合(Named Credentials がより簡単で推奨)。
実装例
以下は、OAuth 2.0 Web Server Flow を使用して、認可コードをアクセストークンに交換するための典型的な HTTP POST リクエストの例です。これは、外部アプリケーションのサーバーサイドで実行されます。
// cURL コマンドを使用したアクセストークン取得の例 // このコマンドは、外部アプリケーションのサーバーサイドから実行されます。 curl -X POST \ https://login.salesforce.com/services/oauth2/token \ -d "grant_type=authorization_code" \ -d "client_id=YOUR_CONSUMER_KEY" \ -d "client_secret=YOUR_CONSUMER_SECRET" \ -d "redirect_uri=YOUR_CALLBACK_URL" \ -d "code=YOUR_AUTHORIZATION_CODE"
実装ロジック解析:
curl -X POST:HTTP POST リクエストを送信することを示します。アクセストークンの取得は常に POST メソッドで行われます。https://login.salesforce.com/services/oauth2/token:Salesforce の OAuth トークンエンドポイントです。本番組織の場合はlogin.salesforce.com、Sandbox の場合はtest.salesforce.comを使用します。-d "grant_type=authorization_code":使用するグラントタイプ(認可タイプ)を指定します。ここでは、認可コードフローであることを示しています。-d "client_id=YOUR_CONSUMER_KEY":Connected App の Consumer Key (クライアント ID) を指定します。これは Salesforce の Connected App 設定ページで確認できます。-d "client_secret=YOUR_CONSUMER_SECRET":Connected App の Consumer Secret (クライアントシークレット) を指定します。これは秘密情報であり、外部に漏洩しないよう厳重に管理する必要があります。-d "redirect_uri=YOUR_CALLBACK_URL":Connected App の設定で登録したコールバック URL を指定します。この URL は認可コードを受け取るために使用されたものと完全に一致する必要があります。-d "code=YOUR_AUTHORIZATION_CODE":ステップ3で Salesforce から受け取った認可コードを指定します。このコードは一度しか使用できません。
このリクエストが成功すると、Salesforce から JSON 形式でアクセストークン、リフレッシュトークン、インスタンス URL、トークンタイプなどが含まれたレスポンスが返されます。外部アプリケーションはこのアクセストークンを使用して、Salesforce API へのリクエストを認証します。
注意事項とベストプラクティス
権限要件
- Connected App の管理:Connected App を作成・編集するには「Connected App の管理」権限を持つプロファイルまたは権限セットが必要です。
- OAuth ポリシー:Connected App の「OAuth ポリシー」セクションで、「許可されたユーザー」を「管理者承認済みのユーザーは事前に承認済み」に設定した場合、対象プロファイルまたは権限セットで Connected App へのアクセスを明示的に有効にする必要があります。
- API アクセス:Connected App を使用するユーザーのプロファイルまたは権限セットで「API 有効」権限が付与されている必要があります。
- スコープ:必要な最小限の OAuth スコープのみを Connected App に設定し、過剰な権限を与えないようにします。
Governor Limits
- API コール数制限:Connected App 経由の API コールは、Salesforce 組織全体およびユーザーごとの標準 API コール数制限にカウントされます。Enterprise Edition では、通常 1 日あたり 15,000 + (ユーザーライセンス数 × 1,000) コールが上限です。
- リフレッシュトークン:リフレッシュトークンの発行数や有効期限に関する厳密な組織制限は通常公開されていませんが、乱用やセキュリティ侵害を避けるため、適切なポリシー設定と監視が重要です。
- 同時トークン数:特定のユーザーまたは Connected App が同時に保持できる有効なアクセストークンとリフレッシュトークンの数には、内部的な制限が存在する場合があります。
エラー処理
invalid_grant:認可コードが無効、期限切れ、またはすでに使用済みの場合。あるいはリフレッシュトークンが無効または失効した場合に発生します。再認可フローを実行するか、リフレッシュトークンの有効期限ポリシーを確認してください。invalid_client:client_idまたはclient_secretが正しくない場合に発生します。Connected App の設定を確認してください。insufficient_scope:要求された API 操作に必要なスコープが、現在のアクセストークンに含まれていない場合に発生します。Connected App のスコープ設定を確認し、必要に応じて再認可を促してください。- ロギングと監視:エラーが発生した際には、詳細なログを記録し、Salesforce のログイン履歴やイベントモニタリングツールを活用して問題を特定・解決します。
パフォーマンス最適化
- 適切な OAuth フローの選択:永続的なアクセスが必要な場合はリフレッシュトークンを伴う Web Server Flow を、ユーザーインタラクションが不要な場合は JWT Bearer Flow を利用するなど、ユースケースに最適なフローを選択します。
- リフレッシュトークンの利用:アクセストークンの有効期限は短いため、リフレッシュトークンを適切に利用して新しいアクセストークンを取得し、ユーザーが何度も認証する手間を省きます。
- API リクエストのバッチ処理:複数の API コールをまとめて送信できる Composite API や Composite Graph API を活用し、API コール数を削減します。
- IP Relaxation の設定:信頼できる IP アドレスからのアクセスのみを許可することでセキュリティを強化しつつ、不要な IP 制限をかけないことで接続の問題を回避します。
よくある質問 FAQ
Q1:Connected App と Remote Site Settings は何が違いますか?
A1:Connected App は「外部アプリケーションが Salesforce にアクセスする」際の認証・認可を管理します。一方、Remote Site Settings は「Salesforce 組織(Apex Callout など)が外部の Web サービスにアクセスする」際に、セキュリティ上の制限(信頼できるエンドポイント)を設定するものです。役割が逆になります。
Q2:リフレッシュトークンが失効または取り消された場合、どのように対処すべきですか?
A2:リフレッシュトークンが失効または取り消された場合、新しいアクセストークンを取得できなくなります。この場合、外部アプリケーションはユーザーに対して再度完全な OAuth 認可フロー(ログインと承認)を実行してもらう必要があります。非対話型のシステム連携では、JWT Bearer Flow のような別のフローを検討するか、定期的なトークンチェックと再認証メカニズムの実装が必要です。
Q3:Connected App 経由の API コールパフォーマンスを監視するにはどうすればよいですか?
A3:Salesforce のイベントモニタリング (Event Log File、特に API Total Usage Event や Login Event)、Lightning Usage App の「API Usage」レポート、および「Connected App OAuth 使用状況」レポートを利用して、API コール数、エラー率、ログインアクティビティなどを監視できます。外部アプリケーション側でも API コール時間や成功/失敗をログに記録し、監視システムで可視化することが重要です。
まとめと参考資料
Connected Apps は Salesforce のインテグレーション戦略における中核的なコンポーネントであり、外部システムとのセキュアでスケーラブルな連携を実現するために不可欠です。適切な OAuth フローの選択、セキュリティベストプラクティスの適用、そして継続的な監視を通じて、Salesforce の強力な機能を最大限に活用できます。
- Connected Apps のコア価値は、外部アプリケーションと Salesforce 間のセキュアな認証・認可フレームワークの提供にあります。
- OAuth 2.0 に基づくフローの理解と、Consumer Key/Secret、Callback URL、Scopes などの主要コンポーネントの適切な設定が重要です。
- Named Credentials や API Gateway との使い分けを理解し、ユースケースに最適なソリューションを選定することが、効率的かつ安全なインテグレーションへの鍵です。
- セキュリティ、ガバナ制限、エラー処理、パフォーマンス最適化に関するベストプラクティスを遵守することで、堅牢なシステムを構築できます。
公式リソース:
- 📖 公式ドキュメント:Connected Apps Overview
- 📖 公式ドキュメント:OAuth 2.0 Authorization Flows
- 🎓 Trailhead モジュール:Identity Basics: OAuth and OpenID Connect
コメント
コメントを投稿