作成中の 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サーバーの背後にある暗号化を設計する方法を尋ねています。