Внешне предоставленное имя пользователя как личность? - PullRequest
1 голос
/ 27 августа 2011

У меня есть несколько систем, которые используют внешнюю аутентификацию, аутентификацию Google. Я просто храню информацию для входа в переменную сеанса и таким образом отслеживаю пользователя (без поставщика членства).

Я хотел бы иметь идентификатор пользователя в объекте HttpContext.Current.User. Должен ли я назначить пользователя вручную для события в Global.asax.cs или я могу автоматически определить пользователя во время сеанса?

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

Вы можете написать собственный атрибут Authorize, который позаботится о назначении свойства HttpContext.Current.User из сеанса:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var user = httpContext.Session["username"] as string;
        if (string.IsNullOrEmpty(user))
        {
            // we don't have any username inside the session => unauthorized access
            return false;
        }

        // we have a username inside the session => assign the User property
        // so that it could be accessed from anywhere
        var identity = new GenericIdentity(user);
        httpContext.User = new GenericPrincipal(identity, null);
        return true;
    }
}

Затем просто украсьте свои контроллеры / действия, которые требуют аутентификации, с помощью этого пользовательского атрибута.

1 голос
/ 27 августа 2011

Используйте поставщика членства, он даст вам именно то, что вы хотите.Даже создание собственного провайдера не так уж сложно, просто реализуйте абстрактный класс MembershipProvider и подключитесь к config, или используйте некоторые из готовых провайдеров.что-то критическое, например, безопасность, у него будут дыры в безопасности.Хранить информацию аутентификации в сессии - очень плохая идея.Он оставляет его открытым для перехвата сеансов, атак с повтором сеансов и т. Д.

Если вы действительно хотите пойти по пути пользовательской аутентификации.Тогда взгляните на код, который я разместил здесь .Он покажет вам, как вы можете получить контроль над cookie-файлом аутентификации и использовать его для создания собственного экземпляра HttpContext.Current.User.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...