多くの調査の結果、client_credentials
助成金の種類がこのシナリオに適していることがわかりました。この用語をグーグルに打ち込むと、非常に役立つリソースがたくさん見つかります。
これは 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 を実装するためのアプリケーション フローです。これは非常に単純です。
このアプローチでは、認証を実行する必要はありません。
/oauth/token
次のフォーム データを使用して単純に POST します。
grant_type=client_credentials&scope=view_friends
スコープはオプションであることに注意してください。その後、エンドポイントは、使用するアクセス トークンを直接返します (更新トークンは提供されません)。更新トークンが提供されないため、トークンの有効期限が切れると、再認証して新しいトークンを要求する必要があります。
これは、次の警告につながります。
- これは、内部アプリケーションなどの (非常に) 信頼できるアプリケーションにのみ使用してください。
- 独自の認証方法を考案する必要があります。たとえば、RFC の例では基本認証を使用しています。
もう 1 つの解決策は、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 OAuth 2.0 をサポートする API を作成できるかどうかの質問については、はい、可能です。
その後、/auth
エンドポイントは、ユーザーがサービスに対して認証する必要がある場合にのみ使用されます。
/token
エンドポイントでは、JWT または client_credentials を使用しているかどうかについて、GET パラメーターの値を確認するだけですgrant_type
。urn:ietf:params:oauth:grant-type:jwt-bearer
client_credentials
ユーザーに与える client_id と client_secret を生成するときに、複数をサポートしてgrant_types
いる場合は、ID とシークレットが生成された付与タイプを格納するデータベース列があることを確認してください。ユーザーごとに複数の許可タイプが必要な場合は、許可タイプごとに異なる資格情報のセットを生成します。