加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用OWIN进行基于区域的身份验证

发布时间:2020-12-16 03:24:40 所属栏目:asp.Net 来源:网络整理
导读:我正在开发一个MVC5 Web应用程序.该应用程序有2个区域,’SU’和”App’.每个区域都应独立进行身份验证.每个区域也有自己的登录页面. 我使用 OWIN来验证用户. 现在的问题是,我无法根据用户请求的区域设置owin CookieAuthenticationOptions LoginPath. 例如,如
我正在开发一个MVC5 Web应用程序.该应用程序有2个区域,’SU’和”App’.每个区域都应独立进行身份验证.每个区域也有自己的登录页面.
我使用 OWIN来验证用户.
现在的问题是,我无法根据用户请求的区域设置owin CookieAuthenticationOptions LoginPath.
例如,如果用户请求http://example.com/su/reports/dashboard,我应该可以将它们重定向到http://example.com/su/auth/login
同样,对于“应用”区域,如果用户请求http://example.com/app/history/dashboard,我应该可以将它们重定向到http://example.com/app/auth/login

我想避免使用自定义属性,因此尝试使用以下代码,但它总是重定向到根登录路径,即http://example.com/auth/login

public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var url = HttpContext.Current.Request.Url.AbsoluteUri;
            string loginPath = "/auth/login";
            string areaName = string.Empty;
            if (url.ToLower().Contains("/su/"))
            {
                areaName = "SU";
                loginPath = "/su/auth/login"; 
            }
            if (url.ToLower().Contains("/app/"))
            {
                areaName = "APP";
                loginPath = "/app/auth/login";
            }
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = "ApplicationCookie" + areaName,LoginPath = new PathString(loginPath)
            });
        }
}

我是否遵循正确的方法或是否有其他方法来实现相同的目标?谢谢!

解决方法

CookieAuthenticationOptions.LoginPath属性在启动时设置一次.为了根据请求使用不同的URL,您可以使用通过CookieAuthenticationOptions.Provider设置的ICookieAuthenticationProvider的自定义实现,或者只在内置的CookieAuthenticationProvider中为OnApplyRedirect设置自定义操作.第二个选项更简单,看起来足够你的情况.

这是一个示例代码:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "ApplicationCookie",LoginPath = new PathString("/auth/login"),Provider = new CookieAuthenticationProvider { OnApplyRedirect = OnApplyRedirect }
});

public static void OnApplyRedirect(CookieApplyRedirectContext context)
{
    var url = HttpContext.Current.Request.Url.AbsoluteUri;

    string redirectUrl = "/auth/login";
    if (url.ToLower().Contains("/su/"))
    {
        redirectUrl = "/su/auth/login";
    }
    else if (url.ToLower().Contains("/app/"))
    {
        redirectUrl = "/app/auth/login";
    }

    context.Response.Redirect(redirectUrl);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读