5

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

4

3 に答える 3

0

実際、実装のほとんどは、OAuth 2.0 で mac ではなく https 経由でベアラー トークンを使用しています。ベアラーを好む理由については、このプレゼンテーション ページ 54-56を確認してください。一方、Spring 実装は OAuth 2.0 の MAC トークンをサポートしておらず、それに関する未解決の問題がありますが、まだ開いています

当分の間、Spring 実装のデモを探している場合は、このソース コードを確認できますが、トークンを格納するためにデータベースを使用しており、リソース サーバーと承認サーバーの間で接続を行う必要があります。このデモでは、データベースを使用しています。 .

Spring OAuth 2.0 のオープン ソース実装の 1 つは、cloudfoundry の UAA です。私はそれに関する 1 つのセッションに参加しました。また、両方のサーバー間で通信を行う必要があるとのことでした。リンク

于 2013-04-29T16:15:40.617 に答える
0

あなたの説明は順調に始まったようですが、私はあなたのアプローチに部分的にしか従うことができなかったことを告白しなければなりません. AFAIK OAuth2は、署名付きリクエストではなくHTTPSに大きく依存していますが、自由に使用できると思います.

アクセスを取り消すために提示した概念についてはわかりません。通常、これはアクセス トークンのみに依存します (ある時点で有効期限が切れる必要があり、取り消すことができ、更新することができます)。API リクエストでユーザー ID のキーをプルしている場合、コードが OAuth クライアントではなく「ユーザー」の概念に密接に結び付けられている可能性があります (ロール、スコープ、リソースを使用)。

いずれにせよ、それは単純な標準ではなく、議論はかなり長く続く可能性があり、それでもすべてをカバーできるかどうかはわかりません. 次の RFC を確認したと思います。

https://www.rfc-editor.org/rfc/rfc6749

また、あなたのプロフィールから、おそらく Java 開発者であることがわかります。そのような場合、次の場所で Spring-security-oauth2 を確認することをお勧めします。

https://github.com/SpringSource/spring-security-oauth

あなたのソリューションがJavaを使用しない場合、質問で言及した問題の多くはそのようなプロジェクトによってアプローチされ解決されたので、多くのアイデアが得られるはずです. Java を使用する場合は、大いに役立つ可能性があります。

それが役に立てば幸い!

于 2013-04-27T21:42:43.043 に答える