web-dev-qa-db-ja.com

OAuthでのclient_idの悪用

バックエンドがAPIで構成されるWebアプリがあります。 OAuthを使用して、APIへのWebアプリの呼び出しを承認します。OAuthでは、Authorizationコードを取得するために使用されるAuthorizationエンドポイントが常に存在し、それを使用して承認トークン。承認エンドポイントでは、その入力パラメーターの一部がclient_idです。これは、リソース(モバイルアプリ、Webアプリなど)にアクセスするコンポーネントの識別子です。

  1. この場合、client_idはブラウザに保存されていますか?それがどこに保存されているかをどのように知ることができますか?

  2. WebアプリのユーザーがOAuthを使用して正常に認証でき、Webアプリ経由でAPIにアクセスする許可が与えられたが、彼のマシンを使用した後、次のユーザーがブラウザーでclient_idを取得できた場合。彼/彼女はAPIにアクセスできますか?

アプリに侵入テストを最近実施し、テスターがclient_idで多くの問題を抱えていたので、両方に質問します。彼らは、これは列挙を介して推測することができ、推測されると、リソースへのアクセスに使用できると述べました。また、ブラウザーに保存されている場合(アプリがWebアプリの場合)、公共のコンピューターを使用している場合、他の人がこれを取得し、これを使用して、Webアプリが使用するAPIにアクセスして使用できます(彼らが何を知っている場合)彼らのURLは)です。これが本当に有効な問題かどうか、私は混乱しています。

4
user233194

client idの保存場所は、Webアプリケーションのアーキテクチャによって異なります。 OAuth 2は、2つのクライアントタイプを定義します-パブリッククライアント(クライアント資格情報を秘密に保つことができない)と機密クライアント(クライアント資格情報を秘密に保つことができます)。

いずれにせよ、client idは秘密ではありません。これが OAuth仕様client idについて述べていることです。

クライアント識別子は秘密ではありません。リソース所有者に公開されており、クライアント認証に単独で使用してはなりません

機密クライアントの場合、client secretを使用して、保護する必要のあるクライアントを認証します。一般に、パブリッククライアントは認証されません。他の多くの側面が検証されます(1つの例はリダイレクトURLです。詳細については仕様を確認してください)。

攻撃者がclient idの所有者を取得した場合、APIにアクセスできますか?いいえ、彼らがあなたのclient secretを知らない限り。それがパブリッククライアントである場合でも、攻撃者はそれを使用してアクセストークンを取得する前に、認証コードを取得するために有効なユーザー資格情報を提供する必要があります。脅威の詳細な概要については、 OAuthの脅威モデル を確認してください。

2
bhorkarg