web-dev-qa-db-ja.com

2-legged oauthは、OAuth 2.0で動作しますか?

OAuth 1.0、2-leggedは非常に簡単です。通常どおりリクエストを送信し、access_tokenヘッダー。

OAuth 2.0(劇的に、今日見つけたように:))で物事が変わったようです。 OAuth 2.0では、リクエストにnonce、consumer key、timestampなどのヘッダーはなくなりました。これは次のように置き換えられます。

Authorization: OAuth ya29.4fgasdfafasdfdsaf3waffghfhfgh

OAuth 2.0およびアプリケーションフローで3つのレッグ認証がどのように機能するかを理解しています。 -legged OAuth 2.0?

これに関する情報を探していましたが、1.0では2-leggedで多くのものを見つけましたが、2.0ではほとんど何も見つけていません。

51
F21

多くの調査の結果、client_credentials付与タイプがこのシナリオに適していることを発見しました。この用語をGoogleにパンチすると、非常に役立つリソースがたくさん見つかります。

これは3-legged OAuth 2.0(ユーザーにサインインしてほしい)の通常のフローです:

認証用のアプリに次のエンドポイントがあると仮定します。

/oauth/auth

/oauth/token

通常(認証コードの付与の場合)、ユーザーを/oauth/auth?state=blah&client_id=myid&redirecturl=mysite.com/blahに誘導します

次に、認証時に、ユーザーはmysite.com/blah?code=somecodeにリダイレクトされます

次にsomecodeを取得し、/oauth/token?code=somecode&client_id=myid&client_secret=mysecretを使用してトークンと交換します

その後、トークンを使用して呼び出しを行うことができます。


これはclient_credentialsが2-legged OAuth 2.0を実装するためのアプリケーションフローです。これは著しく単純です:

  • このアプローチでは、認証を実行する必要はありません。
  • POST to /oauth/tokenに次のフォームデータを追加します。

    grant_type=client_credentials&scope=view_friends
    

スコープはオプションです。エンドポイントは、使用するアクセストークンを直接返します(更新トークンは提供されません)。更新トークンが提供されていないため、トークンの有効期限が切れると、再認証して新しいトークンを要求する必要があります。

これにより、次の警告が発生します。

  • これは、内部アプリケーションなどの(非常に)信頼できるアプリケーションにのみ使用してください。
  • 独自の方法で認証する必要があります。たとえば、 RFCの例 は基本認証を使用します。

別の解決策は、 google OAuth API のようなJWT(JSON Webトークン)を使用することです。これは非常に複雑なプロセスですが、JWTを生成するためのライブラリが多数存在します。次に、次のフォームデータ(もちろんエンコードされたURL)を投稿します。

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=generated_jwt

これは/oauth/tokenに投稿され、トークンを取得します。


2-leggedおよび3-leggedをサポートするAPIを作成できるかどうかについては、OAuth 2.0はい、可能です

/authエンドポイントは、ユーザーがサービスに対して認証する必要がある場合にのみ使用されます。

/tokenエンドポイントで、JWTまたはclient_credentialsにgrant_typeを使用している場合、urn:ietf:params:oauth:grant-type:jwt-bearerのGETパラメーターでclient_credentialsの値を確認するだけです。

ユーザーに提供するclient_idとclient_secretを生成するときに、複数のgrant_typesをサポートしている場合、IDとシークレットが生成された付与タイプの種類を格納するデータベース列があることを確認してください。ユーザーごとに複数の付与タイプが必要な場合は、付与タイプごとに異なる資格情報セットを生成します。

67
F21

また、Googleの 2-legged OAuth2 の実装を確認することもできます(このドキュメントは最近公開されたと思われます)。

Google Drive SDK委任ドキュメント は、Googleの2-legged OAuth2実装の理解にも役立ちます。

2
Miguel Andres