使用ASP.Net Core 2.0身份登录应用程序对ASP.Net MVC Web应用程序进行身份验证

时间:2018-08-17 20:03:44

标签: c# asp.net asp.net-mvc cookies asp.net-core

我有一些较旧的.Net 4.0 Web应用程序,此后已更新至4.7.1。他们都使用成员身份连接到SSO登录。我使用.Net Core 2.0 Identity创建了一个新的Login应用程序,并且尝试连接到旧应用程序并复制从Membership获得的身份验证。

我遵循了https://docs.microsoft.com/en-us/aspnet/core/security/cookie-sharing?view=aspnetcore-2.1&tabs=aspnetcore2x中的指南和示例代码

我添加了Microsoft.Owin.Security.Interop并使用Cookie身份验证设置了Startup.Auth。我从网络配置中删除了会员资格部分,并添加了:

<remove name="FormsAuthentication" />

我目前在一个连接应用程序将重定向到Startup.Auth类中指定的登录页面的位置。登录后,我能够成功登录,但是不会发生重定向回我的应用程序的情况。我知道我的登录应用程序已成功从调试中显式测试重定向到ReturnUrl。

似乎我正在登录,重定向回我的应用程序,但是被拒绝通过新的cookie身份验证进行访问,因此它再次调用我的登录页面。我在1个或两个应用程序中设置Cookie身份验证的方式似乎有问题。

登录Startup.cs

 //setup applicaitoncookie
    services.ConfigureApplicationCookie(options =>
    {
         //Cookie settings
         options.Cookie.HttpOnly = true;
         options.ExpireTimeSpan = TimeSpan.FromMinutes(30);

         //Cookie Name 
         options.Cookie.Name = "COOKIENAME";

          //path for Login is /Account/Login
          options.LoginPath = "/Account/Login";

          //path for Access Denied is /Account/AccessDenied
          options.AccessDeniedPath = "/Account/AccessDenied";

          options.SlidingExpiration = true;   
      });

     services.AddDataProtection().PersistKeysToFileSystem(
           new System.IO.DirectoryInfo(@"\\server\d$\KeyRing"))
           .SetApplicationName("Login");

应用程序启动。身份验证

 app.UseCookieAuthentication(new CookieAuthenticationOptions
 {
      AuthenticationType = "Identity.Application",
      CookieName = "COOKIENAME",
      LoginPath = new PathString("/Home/Index"),
      Provider = new CookieAuthenticationProvider
      {
           OnApplyRedirect = ApplyRedirect,
           OnValidateIdentity = 
           SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, 
           ApplicationUser>(
                validateInterval: TimeSpan.FromMinutes(30),
                regenerateIdentity: (manager, user) => 
                user.GenerateUserIdentityAsync(manager))
       },
       TicketDataFormat = new AspNetTicketDataFormat(
            new DataProtectorShim(
                 DataProtectionProvider.Create(GetKeyRingDirInfo(),
                 (builder) => { 
                     builder.SetApplicationName("Login"); })
                     .CreateProtector(
                "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware",
       "Identity.Application",
       "v2"))),
        CookieManager = new ChunkingCookieManager()
    });

private DirectoryInfo GetKeyRingDirInfo()
{
     var projectDirectoryInfo = new 
         DirectoryInfo(@"\\server\d$\KeyRing");

     return projectDirectoryInfo;
 }

 private static void ApplyRedirect(CookieApplyRedirectContext context)
 {
       Uri absoluteUri;

       if (Uri.TryCreate(context.RedirectUri, UriKind.Absolute, out 
       absoluteUri))
       {
            var path = PathString.FromUriComponent(absoluteUri);
            if (path == context.OwinContext.Request.PathBase + 
                 context.Options.LoginPath)
            {
                 context.RedirectUri = 
                 "http://localhost/VS_2017/Login/Account/Login" +
                        new QueryString(
                            context.Options.ReturnUrlParameter,
                            "?ReturnUrl=/VS_2017/Application");
             }
        }

        context.Response.Redirect(context.RedirectUri);
   }

我尝试使用OnApplyRedirect或不使用OnApplyRedirect,但是我发现不使用FormsAuthentication webconfig的会员资格将用户定向到我的Login应用程序的唯一方法是使用重定向URL。

我成功创建了Cookie COOKIENAME,并且它在我的浏览器中已加密。我认为我可能在Web应用程序方面丢失了一些东西,这些地方导致我没有正确调用我的Login应用程序并验证它创建的cookie。

任何有关我可能会出错的地方或下一步去哪里的帮助,将不胜感激。谢谢!

0 个答案:

没有答案