Как установить Принципал в приложении ASP.Net - PullRequest
0 голосов
/ 09 января 2009

Я пишу веб-приложение для клиента. У пользователей будет одноразовый ключ, который они будут использовать для первоначальной идентификации себя в приложении. Как только приложение проверит, что ключ действителен, оно переместит их на страницу, где они смогут создать обычную учетную запись для использования при всех последующих входах в систему. Страница создания учетной записи должна быть доступна только после ввода ключа и не должна быть доступна в противном случае. Т.е. он не должен быть доступен пользователям, вошедшим в систему с обычной учетной записью. Это asp.net 3.0 с использованием специального поставщика членства.

Мой план заключается в создании временной учетной записи на основе ключа и аутентификации пользователя с этой учетной записью. Это позволяет им получить доступ к странице создания пользователя (которая защищена тегом местоположения), где они могут создать официальную учетную запись. Затем я проверяю их подлинность с помощью новой учетной записи и удаляю временную учетную запись. Поток таков: пользователь переходит на страницу, где вводит ключ. Если ключ действителен, я создаю временную учетную запись, вызываю FormsAuthentication.SetAuthCookie и перенаправляю на страницу создания учетной записи. Это все работает, хотя кажется немного сложным.

Проблема в том, что страница создания пользователя доступна любому аутентифицированному пользователю; Я хочу, чтобы он был доступен только в период между вводом ключа и созданием формальной учетной записи. Поэтому я решил создать специальную роль для временной учетной записи и сделать страницу создания пользователя доступной только для этой роли и ни для кого другого. Я создал свой собственный объект Principal со специальной ролью и попытался установить его, когда аутентифицирую временную учетную запись, но не могу заставить ее работать.

Я действительно надеюсь, что мне не нужно писать собственный поставщик ролей просто для этого.

Как я могу заставить эту работу? Должен быть более простой способ!

Ответы [ 3 ]

0 голосов
/ 09 января 2009

Мой совет - избегать использования временных учетных записей при проверке пользователя. Вместо этого создайте свою собственную логику для проверки ключа регистрации. Затем в верхней части страницы вы можете проверить, является ли пользователь аутентифицированным пользователем (был вызван SetAuthCookie), и перейти на другую страницу, если это правда.

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

Ключ, однако, заключается в том, чтобы не полагаться на провайдера членства, когда, фактически, пользователь еще не является участником!

0 голосов
/ 23 мая 2009

Назначьте «незавершенную» роль при аутентификации с использованием временного токена, затем ограничьте доступ только к этой роли ... при создании учетной записи отправьте их на страницу повторного входа в систему (завершение токена аутентификации). Это упростит вашу модель безопасности.

0 голосов
/ 09 января 2009

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

Или вы можете указать, чтобы они вводили необходимые данные в дополнение к коду ключа на странице ввода ключа и просто использовали эти данные при создании учетной записи.

...