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ではほとんど何も見つけていません。
多くの調査の結果、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
スコープはオプションです。エンドポイントは、使用するアクセストークンを直接返します(更新トークンは提供されません)。更新トークンが提供されていないため、トークンの有効期限が切れると、再認証して新しいトークンを要求する必要があります。
これにより、次の警告が発生します。
別の解決策は、 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とシークレットが生成された付与タイプの種類を格納するデータベース列があることを確認してください。ユーザーごとに複数の付与タイプが必要な場合は、付与タイプごとに異なる資格情報セットを生成します。
また、Googleの 2-legged OAuth2 の実装を確認することもできます(このドキュメントは最近公開されたと思われます)。
Google Drive SDK委任ドキュメント は、Googleの2-legged OAuth2実装の理解にも役立ちます。