作成中の API 用に OAuth2.0 サーバーを実装する必要がある場合があります。この API により、サードパーティはユーザーに代わってアクションを実行できます。
OAuth2.0 には 3 つのメイン コールがあります。まず、ユーザーに同意を求める呼び出しがあります。これは を返しますcode。2 つ目は、codeが に交換される場所access tokenです。最後に、access tokenを使用して、ユーザーに代わって API を呼び出します。
実装のために、私は最初の呼び出しが として機能するランダムな文字列を生成すると考えていましたcode. はcode、現在のユーザーへのポインタとランダムな とともにデータベースに格納され、HMAC Keyランダムなデータは としてサードパーティに返されcodeます。
サード パーティが を要求するaccess tokenと、別のランダム データが生成され、code. この文字列はHMAC key、ステップ 1 の を使用して署名されます。次に、この署名付き文字列と署名が署名とともに返され、 が形成されaccess tokenます。
API 呼び出しが発生hmac keyすると、提供された に対応するaccess_tokenがデータベースから取得されます。の署名はaccess_token、hmac キーを使用して検証されます。
ユーザーは、許可された HMAC キーのリストから HMAC キーを削除するだけで、サードパーティのアクセスを取り消すことができます。さらに、ランダムなデータに署名するだけで、作成されるたびにすべての access_token を保存することを避け、代わりに hmac キーの短いリストを維持できます。
とにかく、これを考え抜くのは初めての試みです。驚くべきことに、OAuth2.0 のサーバー側の効率的な実装に関する情報はほとんどありません。データベースに保持する情報はできるだけ少なくしたいと考えています。access tokenランダム データに署名し、後で HMAC キーを取り消すことの利点は、すべての認証呼び出しによって生成されたすべてのものを保存する必要がないことです。
考えが必要です!もっと良い方法があるに違いない!
編集:
私は実装を探していません。ありがとう、結構です!また、このシステム全体が HTTPS 上で実行されると想定しています。また、私は純粋な OAuth2.0 フローについて話しているのであって、署名とクライアント キーを使用する OAuth1.0 について話しているのではありません。(たとえば)GoogleのOAuth2.0フローが機能するのと同様の方法で機能するOAuth2.0サーバーの背後にある暗号化を設計する方法を尋ねています。