2016-11-08 7 views
1

OAuth 2.0サーバーを実装しようとしています。RFC6749仕様を読んでいるうちに、section 6 on Page 47「アクセストークンのリフレッシュ」について認識しました。新しいトークンを取得するために必要なリフレッシュトークンを使用する必要があることを説明します。Refresh TokenをOAuth 2.0で送信する必要があります

たとえば、Refresh Tokenに加えて、GoogleはUser IDとSecretを必要とします。

これは、私たちが毎日大量のリクエストを処理しているGoogleを持っているため、狭い範囲で仕様書が作成されているため、混乱します。

リフレッシュトークンで1時間ごとに秘密を送信するのは良いですか?

個人的に私は誰も信じていません:ユーザーIDと秘密は、OAuth 2.0プロセス全体を処理するためにのみ使用する必要があるためです。

基本的に

  1. あなたはあなたが誰であるかであることを証明するために、各要求にトークンを使用しています。
  2. リフレッシュトークンは1時間に1回のみ使用されます(リフレッシュごとに変更される可能性があります)。
  3. シークレットとユーザーIDは、できるだけインターネットにはほとんど行きません。オプション1と2が侵害された場合のみ。

個人的には、リフレッシュトークンで秘密情報を送信することは安全性が低いと私は思っています。しかし、多分私は何かを逃しています。あなたは別の視点を持っている場合は

、それを共有してください:)

答えて

1

私は何かが欠けているかもしれないが、Googleが必要で、何ものOAuth2で指定されていますが何であるかその機密クライアントアプリケーションからのトークンをリフレッシュするときクライアントは自身を認証する必要があります

機密クライアントに使用される最も一般的な資格情報は、クライアントの秘密と一緒にクライアント識別子です。この情報はクライアントアプリケーションに発行され、エンドユーザーとは無関係です。

クライアント認証を要求することによって、認証サーバーは特定のクライアントからの要求を確実に確認し、それに応じて応答を調整することができます。たとえば、認可サーバーは特定のアクセス許可(スコープ)を機密クライアントからのみ要求できると判断できます。

クライアントシークレットをワイヤを介して送信する必要がある回数を減らすという議論は、問題ではないです。 OAuth2は通信がTLSで行われることを要求しています。秘密の送信に問題がある場合は、ベアラアクセストークンの送信にも問題があります。結論として

、時には全体の文脈を問うことなく、正確に仕様に応じて物事を行うことは、脆弱性につながるかもしれませんが:

を...いくつかのライブラリを検証して有効なトークンとしてnoneアルゴリズムで署名されたトークンを処理します署名。結果?誰でも任意のペイロードを持つ独自の「署名済み」トークンを作成して、一部のシステムで任意のアカウントにアクセスできるようにすることができます。

(ソース:Critical vulnerabilities in JSON Web Token libraries

いくつかのライブラリは、仕様に応じnoneアルゴリズムを処理したが、使用文脈を無視し。開発者が署名を検証するために鍵を渡した場合、署名されていないトークンを有効なものとして扱いたくない可能性が非常に高いです。

しかし、リフレッシュトークンリクエストでシークレットを渡すことは、これらの状況の1つではありませんので、心配しないでください。

+0

説明していただきありがとうございます。私は議論を少し深めていきたいと思います。例えば:私はこの質問を思い付くとき、私はSSLを想定していません。私はそれを使用したくないからではありませんが、今日はman-in-the-middle攻撃をしてSSLを制動する方が簡単です。私がSSLを使用しても、私の接続は明らかに送られていると思う。したがって、できるだけ秘密を送ることはほとんど考えていない。これは有効な懸念事項だと思いますか? –

+0

私はあなたがTLSを銀色の弾丸として見るべきではないことに同意しますが、暗号化されていないHTTPと同じであると仮定する前提も間違っています。そのロジックによって、TLSの使用には要件が必要であるため、OAuth 2.0を使用するのは難しいでしょう。 –

+0

意味があります。あなたの時間をありがとう。 –

関連する問題