lev*_*nja 5 .net authentication owin asp.net-identity
我有一个.NET,MVC 5,EF 6项目.我们正在连接到外部项目/数据库来验证用户,因此我们需要实现的只是登录和注销方法,而不是普通的CRUD方法.我知道我已经将EF正确映射到外部数据库的表中; 我可以看到它得到了用户.
我正在尝试使用OWIN进行身份验证,以便我可以使用[Authorize]整个控制器方法中的属性.我一直在关注这个作为我的向导.
在Startup.Auth.cs我有:
app.CreatePerOwinContext<CustomUserManager>(CustomUserManager.Create);
app.CreatePerOwinContext<CustomSignInManager>(CustomSignInManager.Create);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)
)
},
CookieSecure = CookieSecureOption.Always
});
Run Code Online (Sandbox Code Playgroud)
我也有类实现接口IUserStore<User>,UserManager<User>和SignInManager<User, string>.我CustomUserStore实现了以下方法,因为源代码说它是如何登录的.我实现了其他功能(即虚拟方法DeleteAsync(),UpdateAsync()不需要实施,等等),因为我们只读到这个外部用户数据库访问...
public async Task<User> FindByIdAsync(string id)
{
using (ExternalDBContext context = new ExternalDBContext())
{
return await Task.Run(() =>
context.Users.Where(u => u.Id == id).ToList().FirstOrDefault()
);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的AccountController.Login()我有:
await CustomSignInManager.SignInAsync(model, true, true);
return RedirectToAction("Index", "Dashboard");
Run Code Online (Sandbox Code Playgroud)
但之后SignInAsync(),User.Identity.IsAuthenticated仍然是false因此没有授权的属性将无法正常工作.
#1可能的问题: 我想知道,如果问题是AuthenticationManager,这SignInManager依赖.以下是我在Startup.Auth.cs中实现它的方法:
public class CustomSignInManager : SignInManager<User, string>
{
public CustomSignInManager(CustomUserManager userManager, IAuthenticationManager authenticationManager)
: base(userManager, authenticationManager)
{
}
public static CustomSignInManager Create(IdentityFactoryOptions<CustomSignInManager> options, IOwinContext context)
{
return new CustomSignInManager(context.GetUserManager<CustomUserManager>(), context.Authentication);
}
}
Run Code Online (Sandbox Code Playgroud)
它Microsoft.Owin.Security.AuthenticationManager从上下文中得到一个.
那么:我是否需要做其他事情来实现身份验证?
#2可能的问题:我注意到我CustomUserManager的房产SupportsUserLogin = false. 该属性需要实现IUserLoginStore.我不想实现另一个无用的界面,其中包含我不使用的方法!
那么:这有关系SupportsUserLogin = false吗?我需要实现该接口还是有办法解决这个问题?
总结:总的来说,对于一个我想要做的就是登录用户的项目来说,这已经太复杂了.然后出去 我不想创建/更新/删除用户.我只想记录用户,User.Identity.IsAuthenticated = true直到他们退出.因此,任何关于如何回溯到更简单的使用Identity框架的方法的想法都将受到极大的赞赏.我最大的问题是我是否会走正路.
编辑: 我绝对不想做#2(实现IUserLoginStore),因为那是用于进行外部身份验证.
| 归档时间: |
|
| 查看次数: |
1972 次 |
| 最近记录: |