Кажется, я не могу получить очень простой пример входа с использованием cookie для работы с MVC5 и OWIN.
Я пытался намочить ноги в ASP.net MVC 5 на 2013 год, но до сих пор мне не удавалось заставить даже самую базовую аутентификацию работать правильно.
Я читал вокруг в течение последних нескольких дней, и я наконец наткнулся на (http://brockallen.com/2013/10/24/a-primer-on-owin-cookie-authentication-middleware-for-the-asp-net-developer/) который, казалось, дал самый простой простой пример, который я мог найти. Итак, я попробовал это, но все равно не получается создать сеанс для пользователя.
Вот мой конфиг cookie
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/FooBar")
});
}
Вот мой основной пользовательский логин.
public class LoginController : ApiController
{
private IAuthenticationManager Authentication
{
get { return Request.GetOwinContext().Authentication; }
}
// POST api/login
public void Post([FromBody]LoginInfo email)
{
var fooBar = Authentication.User;
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, "name")
,new Claim(ClaimTypes.Email, "[email protected]")
,new Claim(ClaimTypes.Role, "Foo")
};
var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
Authentication.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity);
}
}
Если бы я дважды нажал на API входа в систему, я бы ожидал, что во второй раз переменная fooBar будет установлена для пользователя, который помечен как аутентифицированный, но когда я проверяю его, он просто говорит, что не аутентифицирован, и не имеет любой из претензий я бы ожидал.
Я также попытался создать базовую службу, чтобы просто проверить, была ли она аутентифицирована на случай, если я неправильно понял, как она работает, но это также не помогает. Если я пытаюсь пойти на это, он говорит, что я не аутентифицирован, он не перенаправляет меня так, как я думал.
public class TestController : ApiController
{
[Authorize(Roles = "Foo")]
public int Get()
{
return 1;
}
}
Я уверен, что мне просто не хватает некоторого базового, но до сих пор, независимо от того, с чем я возился, и независимо от различных руководств и советов, которые я видел в Интернете, ничто не могло заставить работать даже этот простой сценарий. Есть идеи, что я делаю не так?