アプリポータルの権限設計のベストプラクティス(OAuth)
このドキュメントでは、OAuthを利用する際のアプリポータル権限を安全に運用するための推奨設定について説明します。アプリポータルの概要については、アプリポータルの概要(OAuth)を参照してください。
前提:アプリポータルの認可モデル
アプリポータルを通じたAPI連携の認可モデルには、以下の特性があります。
- API連携の認可は アプリ単位 で行われ、基本的には認可操作を行ったユーザー個人の権限には依存しない(※一部のサービスでは、そのサービス上のユーザー権限が別途必要な場合があります)
- 認可されたアプリは、OAuthスコープが許可する範囲内で事業者のデータに対して任意の操作が可能になる
つまり、「アプリを認可する」という操作は、そのアプリに対して事業者のデータへの広範なアクセスを許可することを意味します。このため、誰がアプリを登録でき、誰が認可できるかを適切に管理することが重要です。
各権限のセキュリティ上の意味
アプリポータルには3つの権限があります。それぞれの機能と、セキュリティ上の意味を理解してください。
| 権限 | できること | セキュリティ上の意味 |
|---|---|---|
| システム管理者 | ユーザーの招待・削除、全権限の設定 | アプリポータル全体の統制を担う。付与は最小限にする |
| アプリ開発 | アプリの登録・編集・削除(Client ID/Client Secretの取得) | 認証情報を取得できるが、この権限だけではマネーフォワード クラウドのデータにアクセスできない |
| アプリ連携 | アプリとマネーフォワード クラウドのサービスの連携を認可 | 認可を実行すると、アプリにOAuthスコープの範囲内でデータへのアクセスを許可する。細心の注意を払って付与する権限 |
アプリ連携権限は、認可操作を許可するサービスを選択して付与できます。たとえば「マネーフォワード クラウド会計Plus」のみを選択すれば、ユーザーは選択したアプリ連携のみ認可できます。
ただし、選択したサービス内での操作を制限できません。たとえば、「マネーフォワード クラウド会計Plus」を選択した場合、そのユーザーはデータの読み取りだけでなく、書き込みを含むすべての操作スコープについて認可操作が可能になります。
アプリ連携権限を持たないユーザーについて: アプリ連携権限が付与されていないユーザーは、アクセストークンを発行できません。つまり、この権限がなければAPIによるデータアクセスは一切不可能です。
権限の設定方法は「権限」の設定方法を参照してください。
アプリ開発権限とアプリ連携権限を分離する
なぜ分離が必要か
アプリポータルでは、「アプリの登録(アプリ開発)」と「アプリとサービスの連携(アプリ連携)」を別の権限として管理しています。
この2つの権限を同一のユーザーに付与すると、そのユーザーはアプリの登録から認可まで単独で完了できます。これは以下のリスクにつながります。
- 管理者の承認なしに、意図しないアプリが事業者のデータにアクセスできる状態になる
- 従業員が個人的に作成したアプリ(野良アプリ)が、管理者の知らないうちに認可される
- 管理者が把握・承認していない外部サービスが認可される
推奨される運用
本番環境では、アプリ開発権限とアプリ連携権限を異なるユーザーに付与してください。
| 環境 | アプリ開発 | アプリ連携 | 説明 |
|---|---|---|---|
| 開発・テスト環境 | 開発者 | 開発者(兼務可) | 開発効率のため、同一ユーザーに両方の権限を付与しても問題ない |
| 本番環境 | 開発者 | 管理者・情報システム部門のみ | 認可は連携管理者が確認した上で実施する |
本番環境では、アプリ開発権限を持つユーザーにアプリ連携権限を付与しないでください。権限を分離することで、アプリの登録と認可の間に管理者による確認プロセスを挟むことができます。
ユースケース別の推奨権限構成
事業者が外部のSaaSを利用する場合
事業者がすでに利用している外部SaaSを、マネーフォワード クラウドと連携して利用するケースです。
- アプリの登録(アプリ開発権限):担当者が、アプリポータルにアプリを登録する。アプリ名称・リダイレクトURI(連携先から提供される情報)を入力すると、アプリポータルがClient IDとClient Secretを発行する。発行された認証情報を連携先の設定画面などで入力する
- 連携の認可(アプリ連携権限):連携管理者が、連携内容を確認した上で認可する
- 連携の利用:認可後、連携先の外部SaaSは発行されたトークンを使ってマネーフォワード クラウドのAPIにアクセスし、データの取得・連携をする
| 役割 | アプリ開発 | アプリ連携 | 理由 |
|---|---|---|---|
| 外部SaaSの利用を担う担当者(部門担当者や情報システム部門など) | 付与する | 付与しない | アプリの登録を担う。認可権限を持たせる場合、連携管理者の承認なしに連携が成立してしまうリスクがある |
| 事業者の管理者(情報システム部門など) | 不要 | 付与する | 連携対象のアプリを確認した上で認可する |
社内システムとマネーフォワード クラウドを連携する場合
社内の開発者がアプリを登録・開発し、管理部門が認可するケースです。
| 役割 | アプリ開発 | アプリ連携 | 理由 |
|---|---|---|---|
| 社内の開発者 | 付与する | 本番環境では 付与しない | アプリの登録と開発を担う。テスト環境では兼務可だが、本番環境では権限を分離する |
| 管理者・情報システム部門 | 不要 | 付与する | 本番環境での認可は連携管理者が確認した上で実施する |
連携を認可する際の確認事項
「アプリ連携」権限を持つ管理者は、アプリとサービスの連携を認可する前に以下を確認してください。
- 承認済みの連携か: 認可対象のアプリが、社内で承認された連携かどうか
- スコープは適切か: 要求されているOAuthスコープが、連携の目的に対して必要最小限の範囲か
- 開発元は信頼できるか: アプリの開発元が信頼できるか(外部SaaSの場合)
認可フローでは、アクセスを許可する前に 同意画面 が表示されます。同意画面には、連携先のアプリがどのデータ・操作へのアクセスを要求しているかが表示されます。内容を十分に確認した上で承認してください。
トークンのライフサイクル
認可によって発行されるトークンには有効期限があります。
| トークン | 有効期間 |
|---|---|
| アクセストークン | 1時間 |
| リフレッシュトークン | 540日 |
アクセストークンとリフレッシュトークンは、アプリポータルからいつでも失効(revoke)させることができます。不正なアクセスが疑われる場合や、連携を終了する場合は、速やかにトークンを失効させてください。
連携の定期的な棚卸し
認可は事業者単位で行われるため、連携を設定した担当者が異動・退職しても連携は停止しません。これは安定した運用を可能にする一方、不要な連携が残り続けるリスクでもあります。
以下の運用を推奨します。
- 定期的な確認: 連携中アプリの一覧を定期的に確認し、不要な連携がないか棚卸しする
- 速やかな解除: 不要になった連携は、連携中アプリの一覧から速やかに解除する
- 担当者変更時の引き継ぎ: 連携の管理担当者が変わる際は、既存の連携状況を引き継ぐ