指定ログイン情報とは
指定ログイン情報の概要
指定ログイン情報(Named Credential)は、Salesforceから外部システムにアクセスする際の接続先URLや認証設定を管理するための機能です。
指定ログイン情報を利用することで、Apexなどのプログラムに接続先URLやユーザー名・パスワードといった認証情報を直接記述することなく、外部APIを呼び出せます。
これにより、認証情報の漏洩リスクを低減できるほか、接続先や認証情報を変更する際の保守性も向上します。
指定ログイン情報と外部ログイン情報の違い
現在の新しい方式では、指定ログイン情報と外部ログイン情報を組み合わせて使用します。
指定ログイン情報(Named Credential)
外部APIの接続先URLを管理するための設定です。
Apexからは、指定ログイン情報の名前を使用して外部APIを呼び出せるため、接続先URLをコードに直接記述する必要がありません。
また、外部ログイン情報を関連付けることで、API呼び出し時に必要な認証設定を利用できます。
外部ログイン情報(External Credential)
外部APIへの認証方法を管理するための設定です。
Basic認証やOAuth 2.0などの認証プロトコルを指定し、認証に使用するプリンシパルを定義します。
プリンシパルは、外部システムに対してどの認証主体としてアクセスするかを表すもので、名前付きプリンシパルとユーザーごとのプリンシパルがあります。
また、プリンシパルへのアクセス権は権限セットなどを使用して制御できます。
このように、指定ログイン情報が「どこに接続するか」、外部ログイン情報が「どのように認証するか」を担当することで、接続先と認証設定を分離して管理できる仕組みになっています。
指定ログイン情報を使うメリット
指定ログイン情報を利用することで、外部APIとの連携におけるセキュリティや保守性を向上させることができます。
主なメリットは以下の3つです。
認証情報を安全に管理できる
指定ログイン情報と外部ログイン情報を利用することで、APIの認証に必要なユーザー名やパスワードなどを、Apexのソースコードに直接記述する必要がなくなります。
認証情報は Salesforce の仕組みを通じて安全に保存・利用されるため、ソースコードやGitリポジトリなどに機密情報が含まれるリスクを低減できます。
また、認証方式に応じて Salesforce が認証ヘッダーを生成できるため、Apex側で認証情報を取得・加工する処理を実装せずに済みます。
保守性が向上する
指定ログイン情報を利用すると、接続先URLや認証設定をApexのコードから分離して管理できます。例えば、Sandboxと本番環境で接続先URLが異なる場合でも、それぞれの環境の指定ログイン情報を適切に設定することで、同じApexコードを使用できます。
また、接続先URLや認証情報が変更された場合も、基本的には設定の変更で対応できるため、コードの修正を減らせます。
認証情報の利用を制御できる
新しい方式の指定ログイン情報では、外部ログイン情報に定義したプリンシパルに対して、権限セットやプロファイルによるアクセス制御を設定できます。これにより、外部APIの認証情報を利用できるSalesforceユーザーを制限できます。
例えば、特定の権限セットを持つユーザーだけが、指定されたプリンシパルを使用して外部APIを呼び出せるように設定できます。
指定ログイン情報を使ったAPI呼び出しの実装
公開テストサービスである httpbin を今回の検証に使用し、
- Basic認証( /basic-auth/{user}/{passwd} )
- ユーザー名:testuser
- パスワード:testpass
という設定で実装してみます。
外部ログイン情報の作成
設定 → 指定ログイン情報 →「外部ログイン情報」タブ → 「新規」から、外部ログイン情報を作成します。
- 先述の通りAPIは Basic 認証のため、「認証プロトコル」は “基本認証” にします

指定ログイン情報の作成
「指定ログイン情報」タブ →「新規」から、指定ログイン情報を作成します。
- 「URL」にはAPIのベースURLを入力
- 「外部ログイン情報」には先ほど作成した外部ログイン情報を指定

認証情報の登録
外部ログイン情報に戻り、プリンシパルの「新規」ボタンから、プリンシパルを作成します。
- ID種別について
- 指定ユーザー:複数のSalesforceユーザーが、同じ認証情報を使って外部APIにアクセスする方式(今回はこちらを使用)
- ユーザーごとのプリンシパル:Salesforceユーザーごとに異なる認証情報を使用する方式
- ユーザー名/パスワードは Basic 認証で使用するユーザー名とパスワードを入力

登録したパスワードはマスキングされ、(システム管理者を含む)Salesforce ユーザーが設定画面から平文で確認することはできません。また、Apexにパスワードを直接記述する必要がないため、認証情報の漏洩リスクを低減できます。
権限セットの設定
権限セットを用いて、ユーザーに以下の権限を付与します。
「外部ログイン情報プリンシパルアクセス」から、上記で作成したプリンシパルを有効化

「オブジェクト設定」から、「ユーザーの外部ログイン情報」の参照権限を付与

ApexからAPIを呼び出す
開発者コンソールから実行してみます。
下記のように、callout:指定ログイン情報の名前 の形で指定ログイン情報を参照することができます。

呼び出し成功です。


コメント