2

DotNetOpenAuth4.0.0を使用してOAuth2.0クライアントで作業しています

OAuth2.0クライアントサンプルプロジェクトの「SampleWcf2.aspx」ページについて質問があります。

このページでは、プロパティIAuthorizationStateAuthorizationに次のように記載されています。

    /// <remarks>
    /// Because this is a sample, we simply store the authorization information in memory with the user session.
    /// A real web app should store at least the access and refresh tokens in this object in a database associated with the user.
    /// </remarks>

CallServiceメソッドを使用する前にエンドユーザーのユーザー名を取得するにはどうすればよいですか?トークンをデータベースに保存したい場合は、エンドユーザーのユーザー名が主キーとして必要だと思います。私のプロジェクトでは、Cassandraを使用してトークンを保存し、RowKeyとしてユーザー名を使用する必要があります。

ユーザー名を取得する方法はありますか?

返信を待っています。

BR

4

1 に答える 1

1

サービス プロバイダーから取得したユーザー名は、クライアント アプリの適切なプライマリ キーではありません。ユーザー名はリサイクルできます (たとえば、Yahoo! は、放棄されたユーザー名を新しいアクティブ ユーザーに再発行します)。そうすると、大きなプライバシーの問題が発生します。OAuth 2.0 は認証プロトコルとして設計されていないため、この問題が発生します。

最初にユーザーを自分のサイトにログインさせ (おそらく OpenID 2.0 を使用します。OpenID 2.0 は、プライマリ キーとして使用できる信頼性の高い要求された識別子を提供します)、その後、承認サーバーに送信して、プライベート データへのアクセス許可を取得します。

実際、場合によっては、OpenID + OAuth 拡張機能を介して OpenID 認証と OAuth 認可を組み合わせることもできます。次に、ユーザー名として使用できる信頼できる Claimed Identifier と、後で他のユーザー データを取得するために使用できる OAuth アクセス トークンの両方を取得します。

しかし、別の角度からあなたの質問に答えるために、ユーザー名がわかるまで、アクセス トークンをデータベースに保存するのに苦労しないでください。したがって、サービスからユーザー名を取得する必要がある場合は、アクセス トークン (まだメモリ内にある) を使用してリソース サーバーの Web API を呼び出し、ユーザーのユーザー名を取得します (これは、呼び出しているサービスによって異なります)。アクセストークンとリフレッシュトークンを保存するためのユーザー名。

于 2012-04-04T03:58:59.830 に答える