web-dev-qa-db-ja.com

OAuth 2 vs OpenID Connect to secure API

私はいくつかのアプリケーションをサポートするWeb APIを開発しています:Webサイト、コンパニオンモバイルアプリケーション、そしておそらくいくつかのサードパーティアプリケーション。すべてのアプリケーションは、認証サーバーからアクセストークンを取得し、それをAPIにフィードすることが期待されています。ユーザーは、認証サーバーのウェブインターフェース(サードパーティアプリケーションの場合)またはウェブサイトまたはアプリ(「信頼できる」の場合)に直接認証情報を入力しますアプリケーション)。クライアントアプリ自体は、ユーザーIDを必要としません。

OAuth 2を介して実装を開始しました。これは私のユースケースと完全に一致します。しかし、後で、ネットでいくつかのディスカッションを見つけ、私のシナリオで本当にOpenID Connectが必要かどうかを考えさせられました。さて、数千の単語を読んだ後でも、私はまだ読むことができませんgrokどちらが私の場合に適していますか。

(たとえば、GitHubは私のユースケースとほぼ一致します ses OAuth 2)

APIにOAuth 2またはOpenID Connectが必要かどうかをどのように選択するかに関するガイドラインを教えてください。

更新

私を混乱させるのは次のとおりです:OAuth for authenticationを使用しないことには有効なポイントがあります。しかし、このケースを考慮してください(単純なビジネスルールがあると仮定します:各ユーザー自分のドキュメントのみを表示できます):

  • アプリはトークンのために認証サーバーに行きます
  • ユーザーがアプリを承認するため、トークンが付与されます
  • アプリはデータのトークンを使用してAPIに移動します
  • apiはトークンを承認したユーザーのドキュメントを返します(そのため、トークンをユーザーに追跡することができます)

これは認証シナリオまたは承認シナリオですか?

PS。私は この質問 を知っていますが、最良の答えは私の疑問に対処していません。

37
Serg Rogovtsev

あなたが説明したことから、OAuth 2.0はあなたのニーズにより適しているようです。OpenIDConnectは、OAuth 2.0。 、Facebook、Yahooなどは、「ログイン」サービスを使用してユーザーを認証する方法としてOAuth 2.0を使用し始めたため、ユーザーは資格情報を使用してさまざまなサードパーティのサービスを認証できます。標準= OAuth 2.0はプロトコル内の欠陥のため、この要件を安全に満たすことができません。OpenIDConnectはこれらの欠陥を解決し、プロバイダーが認証フレームワークとして安全にOAuth 2.0を使用できるようにします。= OAuth 2.0はもともと、ユーザーがプロバイダーに保存されたデータへのサードパーティサービスアクセスを許可することを可能にする認証フレームワークとして開発されました。あなたが説明したシナリオは、まさにOAuth 2.0はそのために開発されました。「ログイン」メカニズムを提供する予定がない場合は、OAuth 2.0。

ユーザーがサードパーティサービスの独自の認証情報を持ち、プロバイダーの認証情報を使用してサービスにログインしない場合は、OpenID Connectは必要ありません。

これ は、私が見つけた最も有用なリソースでした。これは、OpenID Connectのデザイナーの1人によるブログ投稿であり、FacebookでのOAuth 2.0。

21
Justin Moore

まず、おそらくご存知のとおり、OpenID ConnectはOAuth2の上に構築された認証レイヤーにすぎません。したがって、どちらを選択するかに関係なく、(一般的な特徴として)OAuth2を実装する必要があります。

OAuth2自体は認証メカニズムです(つまり、トークンが有効であり、特定のスコープセットが付与されていることを確認できます)。そのままでは認証は提供されません(ユーザーが「だれであるか」はすぐにはわかりません)。

ただし、多くの場合、承認認証の両方が必要になることがあります。この場合、それを提供するためにOAuth2の上にレイヤーが必要です。これは、最も一般的には、リソースサーバーにある種の「私は誰ですか」を公開させることによって行われます。アクセストークンに関連付けられたユーザーのIDを返すエンドポイント。

OpenID Connectはそれを行い、ユーザーID( serInfo エンドポイントによって返されるオブジェクト)を claims のセットとして取得および表現する標準的な方法を提供します。

また、クライアントアプリがアクセストークンと共にユーザー情報を受信できるようになります(フローに応じて、トークンエンドポイントによって返される id_token が返されるか、認証コードと一緒に署名付きJWTトークンとして含まれます)。 HTTPリクエストを保存します。

OpenID Connectは、IMOがあまり関心のない他のもの(動的登録など)も提供します。

したがって、OAuth2とOpenID Connectの比較についての質問に答えるには、APIの認証が必要な場合は、OAuth2の上に実装する必要があります。カスタムを行うことも、OpenID Connectを実装することもできます。 OpenID Connectは、仕様全体を実装する場合はvery複雑ですが、MVPを実装してユーザーを認証するだけの場合は比較的簡単です(実装ユーザー情報エンドポイントと標準表現を使用し、おそらくid_tokensを発行します)。

詳細は OpenID Connect仕様 を参照してください。

11
Christophe L