О сохранении токенов клиента DotNetOpenAuth 4.0 - PullRequest
2 голосов
/ 03 апреля 2012

Я работаю на клиенте OAuth2.0 с DotNetOpenAuth 4.0.0

У меня есть вопрос по поводу страницы «SampleWcf2.aspx» в примере проекта клиента OAuth 2.0.

На этой странице свойство IAuthorizationState Authorization отмечено следующим образом:

    /// <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

1 Ответ

1 голос
/ 04 апреля 2012

Имя пользователя, полученное от поставщика услуг, - , а не - хороший первичный ключ для вашего клиентского приложения. Имена пользователей могут быть переработаны (например, Yahoo! повторно выдает свои оставленные имена новым активным пользователям), и тогда у вас возникнет серьезная проблема с конфиденциальностью. OAuth 2.0 не предназначен для использования в качестве протокола аутентификации, поэтому у вас возникла эта проблема.

Гораздо лучше сначала зарегистрировать пользователя на своем собственном сайте (возможно, с использованием OpenID 2.0, который предоставляет надежные заявленные идентификаторы, которые можно использовать в качестве первичного ключа), , а затем отправить их на сервер авторизации для получить разрешение на доступ к своим личным данным.

Фактически, в некоторых случаях вы даже можете комбинировать аутентификацию OpenID с авторизацией OAuth через расширение OpenID + OAuth. Затем вы получаете и надежный Идентификатор Заявки, который вы можете использовать в качестве имени пользователя, и токен доступа OAuth, который впоследствии можете использовать для получения других данных пользователя.

Но чтобы ответить на ваш вопрос под другим углом, не беспокойтесь о хранении токена доступа в вашей базе данных, пока не узнаете имя пользователя. Поэтому, если вам нужно получить имя пользователя из службы, используйте свой токен доступа (все еще только в памяти), чтобы вызвать веб-API сервера ресурсов для получения имени пользователя пользователя (это зависит от того, какую службу вы вызываете), тогда у вас есть имя пользователя для хранения токенов доступа и обновления.

...