進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

セキュリティと認証について

学習の目的

この単元を完了すると、次のことができるようになります。

  • Salesforce アプリケーションで使用するセキュリティおよび認証方法を理解する。
  • 接続アプリケーションの使用してモバイルアプリケーションを Salesforce サーバに統合する方法を理解する。
  • OAuth の基本的な用語を理解する。
  • OAuth 認証および PIN セキュリティにおけるイベントのフローを理解する。

セキュリティと認証について

モバイルデバイスで実行されているエンタープライズアプリケーションにとって、安全な認証は不可欠です。OAuth 2.0 は、ユーザのデータへのアクセスに対する安全な認証を可能にする業界標準のプロトコルで、ユーザ名およびパスワードを渡す必要がありません。OAuth は、ソフトウェアアクセスのバレットキーと呼ばれることがよくあります。バレットキーを使用すると、自動車の特定の部分へのアクセスを制限できます。たとえば、駐車場係にバレットキーを預けても、トランクやダッシュボードの小物入れなどが開けられることはありません。

モバイルアプリケーションの開発者は、Salesforce OAuth2.0 の実装をすばやく簡単に組み込むことができます。実装では HTML ビューを使用してユーザ名とパスワードが収集され、それがサーバに送信されます。サーバからセッショントークンと永続更新トークンが返され、今後のやり取りのためにデバイスに保存されます。

Salesforce 接続アプリケーションは、モバイルアプリケーションを Salesforce に接続するための主要な手段です。接続アプリケーションにより、開発者とシステム管理者は、アプリケーションの接続方法およびアクセス権を付与するユーザを制御できます。たとえば、接続アプリケーションでアクセスを一連のユーザに制限したり、IP 範囲の設定または緩和などを行うことができます。

OAuth の用語

Oauth に関してわからないことがあれば、以下のリストが役立ちます。これらの用語をすべて把握すれば、OAuth を十分に理解できたといえます。
メモ

メモ

このリストでは「コンシューマ」という用語は常に Mobile SDK アプリケーションを指します。それに対して人間のコンシューマは「ユーザ」または「エンドユーザ」と呼ばれます。

コンシューマ鍵
コンシューマ (この場合は、Mobile SDK アプリケーション) が Salesforce に自身の身分を証明するために使用する値です。client_id とも呼ばれます。
アクセストークン
ユーザの Salesforce ログイン情報を使用する代わりに、保護されたリソースへのユーザのアクセスを許可するためにコンシューマにより使用される値。アクセストークンはセッション ID であり、直接使用できます。
更新トークン
新しいアクセストークンを取得するためにコンシューマが使用するトークン。エンドユーザがアクセスを再度承認する必要がありません。
認証コード
エンドユーザによって付与されるアクセスを表示する、有効期間の短いトークン。認証コードは、アクセストークンと更新トークンを取得するために使用されます。
接続アプリケーション
OAuth プロトコルを使用して Salesforce ユーザと外部アプリケーションの両方を検証する、Salesforce の外部アプリケーション。

OAuth2 認証フロー

OAuth 認証中のイベントのフローは、デバイスの認証状態によって異なります。

初回の認証フロー

  1. 顧客が Mobile SDK アプリケーションを開きます。
  2. 認証応答メッセージが表示されます。
  3. 顧客がユーザ名とパスワードを入力します。
  4. アプリケーションが顧客のログイン情報を Salesforce に送信し、それと引き換えに認証成功の確認としてセッション ID を受信します。
  5. 顧客が、アプリケーションの要求を承認してアプリケーションにアクセス権を付与します。
  6. アプリケーションが起動します。

継続的な認証

  1. 顧客がモバイルアプリケーションを開きます。
  2. セッション ID が有効な場合は、アプリケーションが直ちに起動します。セッション ID が期限切れの場合は、初期認証から取得された更新トークンをアプリケーションで使用して、更新されたセッション ID を取得します。
  3. アプリケーションが起動します。

PIN セキュリティ

Salesforce 接続アプリケーションには、アプリケーションでの PIN 保護を介した追加のセキュリティレイヤがあります。この PIN 保護はモバイルアプリケーション自体のものであり、デバイスの PIN 保護や Salesforce 組織が提供するログインセキュリティとは異なります。

PIN 保護を使用するためには、開発者が接続アプリケーションの作成時に [画面ロックと PIN 保護を実装] チェックボックスをオンにする必要があります。オンにすることで、モバイルアプリケーション管理者が、PIN 保護の強制実行、タイムアウト期間のカスタマイズ、PIN の長さの設定を行うかどうかを選択できます。

メモ

メモ

PIN セキュリティはモバイルデバイスのオペレーティングシステムで実装されるため、HTML5 Web アプリケーションではこの機能を使用できません。

実際には、PIN 保護を使用して、モバイルアプリケーションが指定した時間 (分単位) 使用されていない場合に動作を停止させることができます。モバイルアプリケーションがバックグラウンドに渡されても、経過時間は引き続き記録されます。

PIN 保護のしくみは、次のとおりです。
  1. 電話を有効にし、デバイスの PIN を入力します。
  2. Mobile SDK アプリケーションを起動します。
  3. Salesforce 組織のログイン情報を入力します。
  4. Mobile SDK アプリケーションの PIN コードを入力します。
  5. アプリケーションで操作を行い、別のアプリケーションを開く (電話の受信など) ことによってアプリケーションをバックグラウンドに送ります。
  6. アプリケーションがタイムアウトになります。
  7. アプリケーションを再び開き、アプリケーションの PIN 画面 (デバイス用ではなく、Mobile SDK アプリケーション用) が表示されます。
  8. アプリケーションの PIN を入力し、操作を再開できます。

OAuth 2 ユーザエージェントフロー

ユーザエージェント認証フローは、ユーザのモバイルデバイスにあるクライアントアプリケーションで使用されます。認証は、ユーザエージェントの発生元が同じポリシーに基づいています。

ユーザエージェントフローでは、クライアントアプリケーションは HTTP リダイレクトとしてアクセストークンを受信します。クライアントアプリケーションは、ユーザエージェントを別の Web サーバまたはアクセス可能なローカルリソースにリダイレクトするよう認証サーバに要求します。サーバは応答からアクセストークンを抽出してクライアントアプリケーションに渡すことができます。セキュリティ上の理由により、トークン応答は、URL でハッシュ (#) フラグメントとして指定されます。これにより、サーバや、参照ヘッダー内の他のサーバにトークンが渡されないようにします。

クライアントの実行可能ファイルはユーザのデバイス上にあり、クライアントの秘密にアクセスしたり悪用したりすることができます。このため、このユーザエージェント認証フローでは、クライアントの秘密を使用しません。
警告

警告

アクセストークンはエンコードされてリダイレクト URI に挿入されているため、ユーザや、デバイス上の他のアプリケーションに公開される場合があります。

ユーザエージェントフロー
  1. クライアントアプリケーションは、アプリケーションの認証および承認のためにユーザを Salesforce に移動します。
  2. ユーザはこの認証フローのアクセスを承認します。
  3. アプリケーションは Salesforce からのコールバックを受信します。

コンシューマがアクセストークンを入手したら、そのアクセストークンを使用して、エンドユーザの代わりにデータにアクセスし、更新トークンを取得できます。更新トークンを使用すると、アクセストークンが何らかの理由で無効になった場合に、コンシューマが新しいアクセストークンを取得できます。

接続アプリケーション

接続アプリケーションは、API を使用して、アプリケーションを Salesforce と統合します。接続アプリケーションは、標準の SAML および OAuth プロトコルを使用して認証し、シングルサインオンと Salesforce API で使用するトークンを提供します。接続アプリケーションでは、標準の OAuth 機能に加え、Salesforce システム管理者がさまざまなセキュリティポリシーを設定したり、対応するアプリケーションを使用できるユーザを明示的に制御したりすることができます。

接続アプリケーションの作成時に指定する情報の一般的なリストを次に示します。
  • 名前、説明、ロゴ、連絡先情報
  • Salesforce がアプリケーションを見つけて認証または識別できるようにするための URL
  • 認証プロトコル: OAuth、SAML、またはその両方
  • IP 範囲 (省略可能)。この範囲のユーザが接続アプリケーションにログインできます
  • 接続アプリケーションが適用できる、モバイルポリシーに関する情報 (省略可能)

Salesforce Mobile SDK アプリケーションは、接続アプリケーションを使用して Salesforce OAuth サービスにアクセスし、Salesforce REST API をコールします。

範囲パラメータの値

OAuth では、サーバおよびクライアントの両方に範囲設定が必要です。サーバ側とクライアント側間の同意によって、範囲に関する契約が定義されます。

  • サーバ側 — Salesforce サーバの接続アプリケーションで、範囲権限を定義します。この設定により、Mobile SDK アプリケーションなど、クライアントアプリケーションが要求できる範囲が決まります。少なくとも、コードで指定した内容に合わせて接続アプリケーションの OAuth 設定を指定します。ほとんどのアプリケーションでは、refresh_tokenwebapi で十分です。
  • クライアント側 — Mobile SDK アプリケーションで範囲要求を定義します。クライアントの範囲要求は、接続アプリケーションの範囲権限のサブセットである必要があります。

サーバ側の設定

範囲パラメータの値を次に示します。

説明
api REST API や Bulk API などの API を使用して、現在のログインユーザのアカウントへのアクセスを許可します。この値には、Chatter REST API リソースへのアクセスを許可する chatter_api も含まれます。
chatter_api Chatter REST API リソースへのアクセスのみを許可します。
custom_permissions 接続アプリケーションに関連付けられている組織のカスタム権限へのアクセスを許可し、現在のユーザで各権限が有効かどうかを示します。
full ログインユーザがアクセスできるすべてのデータへのアクセスを許可し、その他すべての範囲が対象となります。full は更新トークンを返しません。更新トークンを取得するには、refresh_token の範囲を明示的に要求する必要があります。
id ID URL サービスへのアクセスを許可します。profileemailaddressphone を要求すれば、id を使用した場合と同じ結果を個別に得られます。これらの結果はすべて一致します。
openid OpenID Connect アプリケーションの現在のログインユーザの一意の識別子へのアクセスを許可します。

アクセストークンの他にも、「OpenID Connect の仕様」に従って、OAuth 2.0 ユーザエージェントフローおよび OAuth 2.0 Web サーバ認証フローで openid 範囲を使用して、署名付き ID トークンを受信します。

refresh_token 更新トークンを受信できる場合に、それを返すように指定します。これにより、ユーザがオフラインのときにアプリケーションがユーザのデータを操作できます。これは、offline_access を要求した場合と同じ意味になります。
visualforce 顧客が作成した Visualforce ページへのアクセスを許可します。標準の Salesforce UI へのアクセスは許可しないでください。
web Web で access_token を使用することを許可します。visualforce が含まれているため、顧客が作成した Visualforce ページへのアクセスが許可されます。
メモ

メモ

Mobile SDK アプリケーションでは、サーバ側の [接続アプリケーション] 設定で常に refresh_token を選択する必要があります。範囲に full を選択しても、refresh_token を明示的に選択する必要があります。

クライアント側の設定

Mobile SDK アプリケーションの範囲の設定は、次のルールで制御されます。

範囲

Mobile SDK アプリケーションの設定

refresh_token

アプリケーションの Mobile SDK から暗黙的に要求されます。要求に含める必要はありません。

api

Salesforce REST API コールを行う場合に、要求に含めます (ほとんどのアプリケーションに適用されます)。

web

Salesforce 組織で定義されたページにアプリケーションからアクセスする場合に、要求に含めます (Salesforce ベースの Web ページを読み込むアプリケーションの場合)。

full

すべての権限を要求する場合に含めます(Mobile SDK では、refresh_token が暗黙的に要求されます)。

chatter_api

アプリケーションから Chatter REST API をコールする場合に、要求に含めます。

id

(不要)

visualforce

代わりに、web を使用します。

接続アプリケーションの作成

接続アプリケーションの作成は簡単ですが、管理者権限が必要です。Developer Edition 組織または Trailhead Playground 組織では、自動的にこれらの権限が付与されています。

  1. Trailhead Playground 組織または Developer Edition 組織で、[設定] に移動します。
  2. 次のいずれかの手順を実行します。
    • Salesforce Classic を使用している場合は、[作成] | [アプリケーション] を選択し、[接続アプリケーション] までスクロールして [新規] をクリックします。
    • Lightning Experience を使用している場合は、[アプリケーション] | [アプリケーションマネージャ] を選択し、[新規接続アプリケーション] をクリックします。
  3. [基本情報] で、フォームに次のように入力します。
    • 接続アプリケーション名: <任意の名前。スペースを含めることができます>
    • API 参照名: 推奨値を受け入れます。
    • 取引先責任者 メール: メールアドレスを入力します。
  4. API ([OAuth 設定の有効化]) で、[OAuth 設定の有効化] をオンにします。
  5. [コールバック URL] に、<mysampleapp://auth/success など、実在のものか架空のものかを問わず任意の URL> を設定します。自動入力で候補が表示されても選択しないでください。代わりに、コールバック URL を手入力します。
  6. [利用可能な OAuth 範囲] で、以下を選択します。
    • データへのアクセスと管理 (api)
    • Web 経由のデータへのアクセスを提供 (web)
    • ユーザに代わっていつでも要求を実行 (refresh_token、offline_access)
    この最小の範囲セットは、ほとんどの Mobile SDK アプリケーションに適しています。
  7. [追加] をクリックします。
  8. [保存] をクリックします。
設定を保存すると、新しい接続アプリケーションの詳細が表示されます。
  • [コールバック URL][コンシューマ鍵]。Mobile SDK アプリケーションを配布する前に、これらの値をアプリケーションの設定にコピーします。
  • Mobile SDK アプリケーションではコンシューマの秘密は使用しないため、この値は無視できます。

Mobile SDK アーキテクチャとセキュリティについて多少なりともわかったところで、Mobile SDK を実際に試してみましょう。まずは次の Challenge を始めましょう。必要なものは Developer Edition または Trailhead Playground のみです。その後「Set Up Your Mobile SDK Developer Tools (Mobile SDK 開発者ツールの設定)」プロジェクトを完了することをお勧めします。