Реализация OpenID: идентификация пользователей - PullRequest
7 голосов
/ 19 июня 2009

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

Итак, я начал с OpenID от Google и изучил библиотеку, которую они предоставляют. Выглядит простым в использовании, и я могу получить токены, которые говорят мне, что пользователь аутентифицирован. Но как мне идентифицировать этого пользователя, чтобы я мог связать информацию нашего профиля с его идентификатором / токеном / кем угодно?

Я знаю, что мне чего-то не хватает, поэтому для простоты: мне просто нужен пример, который показывает, как аутентифицировать посетителя с помощью Google, а затем получить некоторый токен, который я могу использовать для ссылки на этого пользователя навсегда. (Таким образом, токен сеанса отсутствует.) Этот токен можно затем использовать для того, чтобы пользователь мог заполнить свой профиль.

1 Ответ

4 голосов
/ 19 июня 2009

Поскольку ваши теги предполагают, что ваш язык - C #, я рекомендую DotNetOpenAuth . Он бесплатный и включает в себя примеры, которые покажут вам, как получить свой токен (в терминах OpenID он называется заявленным идентификатором), который можно использовать для различения пользователей.

Чтобы получить заявленный идентификатор (искомый постоянный идентификатор), если вы используете элемент управления OpenIdTextBox или OpenIdLogin, просто обработайте его событие LoggedIn и получите свойство e.ClaimedIdentifier. Если вы делаете это программно (без элементов управления), метод OpenIdRelyingParty.GetResponse() возвращает интерфейс IAuthenticationResponse, в котором есть свойство ClaimedIdentifier, которое вы можете получить.

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

...