私はsalesforce-chatterapiと相互作用するChrome拡張機能を構築しています。ただし、oAuth(ユーザーエージェントフロー)認証を使用しているユーザーの場合、クライアントキーを拡張機能に埋め込む必要があります。
これによりセキュリティ上の問題が発生しますか?または、拡張機能にクライアントIDを埋め込まずにoAuthを使用する方法はありますか?
私はsalesforce-chatterapiと相互作用するChrome拡張機能を構築しています。ただし、oAuth(ユーザーエージェントフロー)認証を使用しているユーザーの場合、クライアントキーを拡張機能に埋め込む必要があります。
これによりセキュリティ上の問題が発生しますか?または、拡張機能にクライアントIDを埋め込まずにoAuthを使用する方法はありますか?
@Matt Laceyがすでに指摘しているように、クライアントIDをリクエストに含める必要があるため、プロバイダーはリクエストがあなたからのものであることを認識しています。通常、プロバイダーは、アクセストークンリクエストに追加で含まれる機密のクライアントシークレットも発行するため、プロバイダーは、アプリがそのクライアントIDの使用を許可されていることを確認できます。
Chrome拡張機能はオープンプラットフォームで実行され、プラットフォーム自体は、サーバーに対して拡張機能を認証する方法(セールスフォースもサポートする必要があります)またはプロパティを安全に保存する方法(オープンプラットフォームで不可能ではないにしても難しい)を提供しません。そのため、クライアントの秘密を秘密にしておくことは残念ながら不可能です。
これは一般的な問題であるため、OAuth仕様ですでに考慮されています(セクション10.1クライアント認証および10.2クライアント偽装を参照)。したがって、プロバイダーは追加のチェックを行う必要がありますが、クライアント側では、セキュリティを効果的に向上させるために何もすることはできません。
将来Androidデバイスでこれがどのように処理されるかについてさらに洞察が必要な場合は、ここで私の回答を確認してください。
認証しようとしているアプリが何であるかをSalesforceに通知するには、拡張機能にクライアントIDを埋め込む必要があります。これらのクライアントIDは、安全な方法で保存している限り、問題が発生しない限り、常に保存されてサーバーに渡されることを目的としています。
Mattが説明したように、パッケージ化されたアプリを作成する場合は、クライアントIDを含める必要があります。別の解決策は、アプリをホスト型アプリとして作成することです。
パッケージ化されたアプリとホストされたアプリの違いは何ですか?
これの欠点は、Webサーバーの管理がさらに複雑になることです。ただし、セキュリティが強化されます。