我目前正在构建一个新的 ASP.NET MVC 5项目,其中包含一个专用于管理员的私人部分。本节以模块化方式开发,并具有自己的身份验证(使用 ASP.NET 身份)我还希望为同一网站中的客户设置一个受限部分,这些客户具有不同的身份验证(也使用 ASP.NET 身份)。
是否可以根据网站的位置使用不同的User.Identity对象?(例如:网站根目录下的"客户用户"和"外联网用户"(如果我们转到/Extranet)
这是我目前为这两个部分编写的代码:
客户端部分(主要 ASP.NET 应用程序):
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
CookieName = "ClientCookie",
LoginPath = new PathString("/Account/LoginRegister"),
ExpireTimeSpan = TimeSpan.FromHours(4),
Provider = new CookieAuthenticationProvider()
});
}
外联网部分(存储在模块项目中):
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
CookieName = "ExtranetCookie",
LoginPath = new PathString("/Extranet/Account/Login"),
Provider = new CookieAuthenticationProvider()
});
}
谢谢!
您可以在应用程序中有多个DbContext
(或IdentityDbContext
)元素。问题是在启动过程中,您需要提供数据库和用户管理器 截至CreatePerOwinContext
.事件 这可以如这篇文章所示处理。
定义两个用户和登录管理器类:
public void ConfigureAuth(IAppBuilder app)
{
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
// Add our custom managers
app.CreatePerOwinContext<CustomUserManager>(CustomUserManager.Create);
app.CreatePerOwinContext<CustomSignInManager>(CustomSignInManager.Create);
}
并在相应的控制器中引用正确的实现:
private CustomSignInManager _signInManager;
public CustomSignInManager CustomSignInManager
{
get
{
return _signInManager ?? HttpContext.GetOwinContext().Get<CustomSignInManager>();
}
private set { _signInManager = value; }
}
我没有自己尝试,但approch看起来很聪明。