0

ここ数時間、Oauth2 プロトコルについて読んでいました。私の理解では、このプロトコルの主な動機は、リソース所有者が資格情報をサード パーティ (クライアント) アプリケーションと共有する必要がなく、リソース サーバーのみと共有する必要があることです。

この投稿では、Oauth2 RFCで定義されているロールを使用しました。ただし、リソースサーバーと認可サーバーの区別はしていません。簡単にするために、それらは同じであると仮定し、それらを「リソースサーバー」と呼びます。

2 つの異なる一連のイベントが表示されます。どちらのシナリオも、クライアントが保護されたリソースにアクセスできるようにする意図を持つリソース所有者から始まると仮定します。

ケース 1、リソース サーバーが提供する GUI

  1. クライアントは、リソース所有者をリソース サーバーのログイン ページに転送します。
  2. リソース所有者は、リソース サーバーの GUI で資格情報を提供します。
  3. 成功すると、リソース サーバーはリソース所有者をクライアントに転送し、ユーザー クライアントにトークンを提供します。

ケース 2、クライアントが提供する GUI

  1. クライアントは、リソース所有者に自分の資格情報を独自の GUI に提供するように依頼します。
  2. クライアントは、提供された資格情報をリソース サーバーに送信します。
  3. 成功すると、クライアントはトークンを取得し、リソース サーバーにアクセスします。

私の懸念はケース 2 です。クライアントとして認証するのではなく、リソース所有者として認証する場合、クライアントがリソース サーバー上で完全な特権を取得するのはどれほど難しいでしょうか? RFC は、クライアントがリソース所有者の資格情報を処理できるようにする代わりに、OAuth2 を使用する理由として次のように述べています。

「サードパーティのアプリケーションは、リソース所有者の保護されたリソースに過度に広範囲にアクセスできるようになり、リソース所有者は期間を制限したり、限られたリソースのサブセットにアクセスしたりすることができなくなります。」

RFC はさらに次のように述べています。

「サードパーティのアプリケーションは、将来の使用のためにリソース所有者の資格情報を保存する必要があります。通常、パスワードはクリアテキストです。」

これは、ケース 2 のクライアントによって非常にうまく保存される可能性があります。

では... Oauth2 を実装するクライアント (ケース 2) は、実装しないクライアントよりも安全であると想定できますか? リソースサーバーがこれらのようなことを防ぐメカニズムを実装することは可能ですか?

4

2 に答える 2

0

適切な OAuth2 実装を使用すると、システムは従来のユーザー/パス ベースのシステムよりも安全であると想定できます。

ユーザー資格情報がクライアントに公開されないため、ケース 1 の方が明らかに優れています。

ケース 2 は可能性にすぎず、多くの OAuth2 プロバイダーはまったくサポートしていません。標準でさえそれを使用することを思いとどまらせますが、何らかの奇妙な理由で単純な古いユーザー/パスベースのロジックを引き続き使用する必要がある場合のフォールバックとしてのみ存在するようです。クライアントアプリケーションは資格情報をまったく保存しない可能性があるため、このケースはまだわずかに優れています. 指定された資格情報は、OAuth 要求を作成した直後にドロップでき、付与されたトークンのみが保存されます。更新トークンを取得すると、ユーザー/パスを再度要求する必要はありません。

アプリケーションからトークンを盗むことは依然としてセキュリティ リスクであることに注意してください。ただし、泥棒はあなたの資格情報に対して完全な特権を持っているわけではなく、あなたがアプリケーションに付与したアクセス権しか持っていません。さらに、アクセス トークンの有効期限が切れるため、プロバイダーは更新トークンの取り消しをサポートする必要があります。

于 2013-10-08T09:29:04.060 に答える
0

ケース 2 を検討してください。

リソース所有者が自分の資格情報をクライアントに提供し、クライアントがパスワードをプレーンテキスト形式でどこかに保存する必要があるとしましょう。

1) しかし、クライアントがあなたの許可なしに情報にアクセスしないことを信頼できますか??
2) 誰かがクライアント データベースをハッキングして、ネットバンキングのパスワードなどの機密情報を含む可能性のあるすべての資格情報にアクセスできたらどうなりますか??

したがって、これらのセキュリティの問題を防ぐために、リソース所有者はリソースサーバーと直接やり取りし、クライアントが必要な情報のみにアクセスできるようにアクセス許可を設定します。次に、サーバーはトークン(ゲートパスなど)をクライアントに発行し、クライアントが情報を必要とするたびにトークンを送信する必要があります。

したがって、セキュリティ上の理由から、クライアントに資格情報を提供しないことをお勧めします。

于 2013-10-04T09:58:37.510 に答える