セキュリティと認証について知る
学習の目的
この単元を完了すると、次のことができるようになります。
- Salesforce アプリケーションで使用されるセキュリティおよび認証方法を特定する。
- 外部クライアントアプリケーションの使用してモバイルアプリケーションを Salesforce サーバーに統合する方法を説明する。
- OAuth の基本的な用語を説明する。
- OAuth 認証および PIN セキュリティにおけるイベントフローの概要を説明する。
OAuth 2.0 でモバイルアプリケーションのセキュリティを保護して認証する
モバイルデバイスで実行されているエンタープライズアプリケーションにとって、安全な認証は不可欠です。OAuth 2.0 は、ユーザーのデータへのアクセスに対する安全な認証を可能にする業界標準のプロトコルで、ユーザー名およびパスワードを渡す必要がありません。OAuth は、ソフトウェアアクセスのバレットキーと呼ばれることがよくあります。バレットキーを使用すると、自動車の特定の部分へのアクセスを制限できます。たとえば、駐車場係にバレットキーを預けても、トランクやダッシュボードの小物入れなどが開けられることはありません。
モバイルアプリケーションの開発者は、Salesforce OAuth2.0 の実装をすばやく簡単に組み込むことができます。実装では HTML ビューを使用してユーザー名とパスワードが収集され、それがサーバーに送信されます。サーバーからセッショントークンと永続更新トークンが返され、今後のやり取りのためにデバイスに保存されます。
Salesforce 外部クライアントアプリケーションは、モバイルアプリケーションを Salesforce に接続するための主要な手段です。外部クライアントアプリケーションにより、開発者とシステム管理者は、アプリケーションの接続方法およびアクセス権を付与するユーザーを制御できます。たとえば、外部クライアントアプリケーションでアクセスを一連のユーザーに制限したり、IP 範囲の設定または緩和などを行ったりすることができます。
OAuth の用語を理解する
Oauth に関してわからないことがあれば、以下のリストが役立ちます。これらの用語をすべて把握すれば、OAuth を十分に理解できたといえます。
コンシューマー鍵 |
コンシューマー (この場合は、Mobile SDK アプリケーション) が Salesforce に自身の身分を証明するために使用する値です。 |
アクセストークン |
ユーザーの Salesforce ログイン情報を使用する代わりに、保護されたリソースへのユーザーのアクセスを許可するためにコンシューマーにより使用される値。アクセストークンはセッション ID であり、直接使用できます。 |
更新トークン |
新しいアクセストークンを取得するためにコンシューマーが使用するトークン。エンドユーザーがアクセスを再度承認する必要がありません。 |
認証コード |
エンドユーザーによって付与されるアクセスを表示する、有効期間の短いトークン。認証コードは、アクセストークンと更新トークンを取得するために使用されます。 |
外部クライアントアプリケーション |
OAuth プロトコルを使用して Salesforce ユーザーと外部アプリケーションの両方を検証する、Salesforce の外部アプリケーション。 |
OAuth2 認証フロー
OAuth 認証時のイベントのフローは、デバイスの認証状態によって異なります。
初回の認証フロー
- 顧客が Mobile SDK アプリケーションを開きます。
- 認証プロンプトが表示されます。
- 顧客がユーザー名とパスワードを入力します。
- アプリケーションが顧客のログイン情報を Salesforce に送信し、認証成功の確認としてセッション ID を受信します。
- 顧客が、アプリケーションの要求を承認してアプリケーションにアクセス権を付与します。
- アプリケーションが起動します。
継続的な認証
- 顧客がモバイルアプリケーションを開きます。
- セッション ID が有効な場合は、アプリケーションが直ちに起動します。セッション ID が期限切れの場合は、初期認証から取得された更新トークンをアプリケーションで使用して、更新されたセッション ID を取得します。
- アプリケーションが起動します。
アプリケーションロックセキュリティ
外部クライアントアプリケーションでは、任意のセキュリティ機能として、指定された時間バックグラウンド状態が続いた後にアプリケーションがロックされるように設定できます。アプリケーションのロックを解除するには、ユーザーに対して、PIN やパスコードなど、オペレーティングシステムの生体認証または暗号化によるチャレンジが求められます。
アプリケーションロック保護を使用するには、開発者が外部クライアントアプリケーションの作成時に [Screen Lock (画面ロック)] チェックボックスをオンにする必要があります。モバイルアプリケーションのシステム管理者は、画面がロックされるまでのタイムアウト時間を設定できます。
OAuth2 Web サーバーフロー
セキュリティを強化するために、Salesforce では Proof Key Code Exchange (PKCE) が含まれる Web サーバーフローを使用することを推奨しています。詳細は、「OAuth 2.0 Web Server Flow for Web App Integration (Web アプリケーションインテグレーションのための OAuth 2.0 Web サーバーフロー)」を参照してください。
OAuth 2 ユーザーエージェントフロー
ユーザーエージェントフローでは、クライアントアプリケーションを Salesforce API と統合する外部クライアントアプリケーションは、アクセストークンを HTTP リダイレクトとして受信します。外部クライアントアプリケーションは、ユーザーエージェントを Web サーバーまたはアクセス可能なローカルリソースにリダイレクトするよう認証サーバーに要求します。
Web サーバーは応答からアクセストークンを抽出して外部クライアントアプリケーションに渡すことができます。セキュリティ上の理由により、トークン応答は、URL でハッシュタグ (#) フラグメントとして指定されます。この形式は、サーバーや、参照ヘッダー内のほかのサーバーにトークンが渡されないようにします。
警告
アクセストークンはエンコードされてリダイレクト URI に挿入されているため、ユーザーや、デバイス上のほかのアプリケーションに公開される場合があります。
範囲パラメーターの値
OAuth では、サーバーおよびクライアントの両方に範囲設定が必要です。サーバー側とクライアント側間の同意によって、範囲に関する契約が定義されます。
-
サーバー側: Salesforce サーバーの外部クライアントアプリケーションで、範囲権限を定義します。この設定により、Mobile SDK アプリケーションなど、クライアントアプリケーションが要求できるアクセスレベルが決まります。少なくとも、コードで指定した内容に合わせて外部クライアントアプリケーションの OAuth 設定を指定します。ほとんどのアプリケーションでは、refresh_token、web、api で十分です。範囲の完全なリストについては、「OAuth Tokens and Scopes (OAuth トークンと範囲)」を確認してください。
-
クライアント側: Mobile SDK アプリケーションで範囲要求を指定します。クライアントの範囲要求は、外部クライアントアプリケーションの範囲権限のサブセットである必要があります。Mobile SDK 13.2 以降では、範囲を指定しないと、サーバーで設定されたすべての範囲が付与されます。
外部クライアントアプリケーション
外部クライアントアプリケーションは、サードパーティアプリケーションが API とセキュリティプロトコルを使用して Salesforce と統合できるようにする、パッケージ化可能なフレームワークです。また、構造上の改善により、ユーザーロールを別々に管理したり、第 2 世代管理パッケージを使用したりできるようになっています。Salesforce では外部クライアントアプリケーションの使用を推奨しており、既存のローカル接続アプリケーションはローカル外部クライアントアプリケーションに移行することをお勧めします。
外部クライアントアプリケーションを作成する
外部クライアントアプリケーションは簡単に作成できますが、システム管理者権限が必要です。Developer Edition 組織または Trailhead Playground 組織では、自動的にこれらの権限が付与されています。
- Trailhead Playground 組織または Developer Edition 組織で、[Setup (設定)] に移動します。
- [Setup (設定)] から、[Quick Find (クイック検索)] ボックスに
Apps(アプリケーション) と入力し、[External Client Apps Manager App Manager (外部クライアントアプリケーションマネージャー)] を選択します。
-
[New External Client App (新規外部クライアントアプリケーション)] を選択します。
-
[Basic Information (基本情報)] で、フォームに次のように入力します。
- External Client App Name (外部クライアントアプリケーション名):
Trailhead Intro
- API Name (API 参照名): 推奨値を受け入れます。
- Contact Email (取引先責任者 メール): メールアドレスを入力します。
- [Distribution State (配信状態)]: ローカル組織向けに外部クライアントアプリケーションを開発するには、[Local (ローカル)] を選択します。外部クライアントアプリケーションをパッケージ化して配信するには、[Distribution State (配信状態)] を [Packaged (パッケージ化済み)] に設定します。
- [API (Enable OAuth Settings) (API ([OAuth 設定の有効化]))] で、[Enable OAuth (OAuth を有効化)] をオンにします。
- [Callback URL (コールバック URL)] に、
mysampleapp://auth/successなど、任意 (実在または架空) の URL を設定します。自動入力で候補が表示されても選択しないでください。代わりに、コールバック URL を貼り付けます。
- [Available OAuth Scopes (利用可能な OAuth 範囲)] で、以下を選択します。
-
API を使用してユーザーデータを管理 (api)
-
Web ブラウザーを使用してユーザーデータを管理 (web)
-
いつでも要求を実行 (refresh_token, offline_access)
-
API を使用してユーザーデータを管理 (api)
-
[Add (追加)] 矢印をクリックして、各選択項目を [Selected OAuth Scopes (選択した OAuth 範囲)] に移動します。この最小の範囲セットは、ほとんどの Mobile SDK アプリケーションに適しています。
-
[Security (セキュリティ)] で、次の操作を行います。
-
[Require Secret for Web Server Flow (Web サーバーフローの秘密が必要)] をオフにします。
-
[Require Secret for Refresh Token Flow (更新トークンフローの秘密が必要)] をオフにします。
- (推奨) [Issue JSON Web Token (JWT)-based access tokens for named users (指名ユーザーの JSON Web トークン (JWT) ベースのアクセストークンを発行)] をオンにします。
-
[Require Secret for Web Server Flow (Web サーバーフローの秘密が必要)] をオフにします。
-
[Create (作成)] をクリックします。
Mobile SDK アーキテクチャとセキュリティについて多少なりともわかったところで、Mobile SDK を実際に試してみましょう。まずは次の Challenge を始めましょう。必要なものは Developer Edition または Trailhead Playground のみです。その後「Set Up Your Mobile SDK Developer Tools (Mobile SDK 開発者ツールの設定)」バッジを完了することをお勧めします。
