我有一些较旧的.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。
任何有关我可能会出错的地方或下一步去哪里的帮助,将不胜感激。谢谢!