c# - 使用 ASP.Net Core 2.0 身份登录应用程序对 ASP.Net MVC Web 应用程序进行身份验证
问题描述
我有一些较旧的 .Net 4.0 Web 应用程序已更新到 4.7.1。他们都使用会员资格连接到 SSO 登录。我使用 .Net Core 2.0 Identity 创建了一个新的登录应用程序,我正在尝试连接到我的旧应用程序并复制他们从会员资格获得的身份验证。
我添加了 Microsoft.Owin.Security.Interop 并使用 cookie 身份验证设置了我的 Startup.Auth。我从我的 web 配置中删除了 Membership 部分,并添加了:
<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");
应用程序启动.Auth
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,但我发现在不使用 FormsAuthentication webconfig for Membership 的情况下将用户定向到我的登录应用程序的唯一方法是使用重定向 URL。
我成功地创建了 cookie COOKIENAME 并且它在我的浏览器中被加密了。我想我可能在 Web 应用程序方面遗漏了一些东西,我没有正确调用我的登录应用程序并验证它创建的 cookie。
任何有关我可能出错的地方或下一步看哪里的帮助将不胜感激。谢谢!
解决方案
推荐阅读
- c# - Response.Body.WriteAsync:无法打开文件
- javascript - 根据视口调整 Canvas 的大小
- sql - 内连接一列值不同的表。但是值的含义是相同的
- sql - 从两个表中获取计数的 SQL 查询
- java - 负责实现注解的 lombok 源代码在哪里?
- react-native - React Native:Android导航栏颜色在加载时随机变化
- reactjs - GH 页面加载不正确的 React 路由器页面?
- javascript - LoginWithRedirect 不是函数
- javascript - 嵌套的“for”循环 - 打字稿角度
- class - 向 Woocommerce 缺货产品卡添加类 - 使用 Hestia 主题