web-dev-qa-db-ja.com

クライアント認証情報と他の認証メカニズムによるOAuth2

RESTクライアントがブラウザ以外の非インタラクティブなアプリケーションを作成するAPIの場合、OAuth2が従うべき認証メカニズムである場合、クライアント認証情報付与タイプを認証これは正しい選択でしょうか。そうであれば、HTTPベーシック/ダイジェストや証明書ベースの相互認証など、他の認証メカニズムよりもどのように優れていますか?

8
Shyamal Pandya

OAuthauthorizationプロトコルであり、-authenticationプロトコルではありません。その役割は、誰が回線の反対側にいるかを伝えることではなく、その人が何ができるかを伝えることです。たまたまOAuthが認証システムにabusedになる可能性があります。これは OpenID Connect と呼ばれます。アイデアは、あなたにauthorization情報を提供するために(クライアントはこれを行うことが許可されているか、それともそれですか?)、OAuthサーバーは最初にクライアントのIDを確認する必要があるということです(私たちは誰について話しているのですか?); OpenID Connectは、内部認証プロトコルを再利用することを目的としています(「OAuthサーバーがアクセスを許可した場合、特に、OAuthサーバーがクライアントを認証し、使用されているプロトコルを信頼しています。 OAuthサーバー、それが何であれ」)。

OAuthサーバーがクライアントを認証する方法を信頼していない場合は、パスワードやクライアント証明書などの他の認証方法を使用できます。その場合、サーバーが認証を行い、thenがOAuthサーバーと通信します。「ボブはオンラインです。彼は何ができるのですか?」.

次に、質問は次のようになります。OAuthサーバーの認証レイヤーは、状況に適していますか?これはあなた次第です。認証を自分で行う場合は、さまざまな特性を持ついくつかの方法があります。どちらが最適かは、状況によって異なります。一般的な方法でできるのはほんの少しの発言だけです:

  • 何をする場合でも、SSLを使用してください。これは、実行する認証と承認が、クライアントがその後あなたに送信するすべての要求に変更できない方法で実際に適用されることを保証するために必要です。
  • SSLを使用するため、HTTPダイジェストは行わないでください。代わりにHTTP Basicを使用してください。 SSLは、HTTPダイジェストが提供するものよりもはるかに優れた保護を提供します(HTTP基本と比較した場合)。 HTTPダイジェストは、適切なパスワードのサーバー側ストレージメカニズム(bcrypt ...)と互換性がありません。
  • クライアント証明書はユーザーにとってより複雑であり、主にauthenticationidentity managementが別々のエンティティーによって実行される場合に意味があります。 yourユーザーをyourサーバーに対して認証するだけの場合、証明書は過剰であり、おそらく良いアイデアではありません。
11
Thomas Pornin