我在DNX RC1中使用Microsofts AspNet.Identity 3.0框架。在一些教程的帮助下,我构建了一个自定义身份验证系统。密码成功检查后,会为用户创建一些声明,并设置身份验证:
var claimsPrincipal = await SignInManager.CreateUserPrincipalAsync(user);
if (claimsPrincipal != null && claimsPrincipal.Identity != null)
{
// Set the claims to the user
await HttpContext.Authentication.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);
return RedirectToAction("Index", "App");
}
此登录操作后,我的浏览器有两个cookie: .AspNet.Cookies 和 .AspNet.Microsoft.AspNet.Identity.Application
但是我的身份确实存在问题。用[授权]注释的控制器根本不执行。带有[AllowAnonymous]的控制器给我一个NullReferenceException,因为User.Identity为null:
[AllowAnonymous]
[Route("api/trips")]
public class TripController : Controller
{
[HttpGet("")]
public JsonResult Get()
{
var trips = _repository.GetUserTripsWithStops(User.Identity.Name);
...
return Json(results);
}
有人可以告诉我我的身份验证有什么问题吗?
我猜我的错误在Startup.cs文件中的某处 - 这是configure方法:
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
app.UseIdentity();
app.UseCookieAuthentication(options =>
{
options.LoginPath = new PathString("/App/Login");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "App", action = "Index" });
});
}
答案 0 :(得分:0)
要访问User
对象,必须使用[Authorize]
修饰控制器/操作。 [AllowAnonymous]
仅适用于[Authorize]
。它本身没有任何作用,因为默认情况下,匿名用户可以访问所有内容。
答案 1 :(得分:-1)
感谢上帝,经过一天多的试验和错误,我找到了解决方案。最后,我在Startup.cs文件中添加了AutomaticAuthenticate-line:
app.UseCookieAuthentication(options =>
{
options.AutomaticAuthenticate = true;
options.LoginPath = new PathString("/App/Login");
});