![](/img/trans.png)
[英]Shared cookie authentication between ASP.NET Core RC2 and .NET 4.5.1 apps
[英]ASP.NET Core Shared Cookie Issue
我已经阅读了 MS 说明和 SO 上的几个线程......我没有想法。 我有 2 个 .net core 3.0 Web 应用程序。 我使用 Okta 进行身份管理,并希望能够在我的应用程序之间进行 SSO - 这一切都在本地运行良好。
但是,当我部署到我在Azure的开发环境中时,却不行,因为站点1写的cookies不能被站点2读取。我想,哦,当然,解决办法就是修复cookie领域。 但这也不起作用。
所以这就是我所在的位置:
站点一:dev-app.mysite.com 站点二:dev.mysite.com
如果我没有明确设置 cookie 域,站点 1 将使用 dev-app.mysite.com 作为 cookie 写入 cookie。
如果我确实将 cookie 域明确设置为“.mysite.com”(根据文档),那么我有一个更大的问题——站点 1 根本看不到它!
这是相关代码(在两个应用程序中相同)
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None;
options.Secure = CookieSecurePolicy.Always;
});
以及我在哪里设置身份验证 cookie:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = new PathString("/Account/SignIn");
options.Cookie.Name = cookieName;
options.Cookie.Domain = cookieDomain;
})
.AddOktaMvc(oktaMvcOptions);
请注意,我已经处理了 cookie 应用程序名称、共享数据保护密钥等。唯一能解决这个问题的是域问题。
这可能是我见过的最奇怪的事情。 我发现如果我这样做,它会起作用:
options.Cookie.Domain = "mydomain.com";
但是,如果我将相同的值放入 appSettings.json 并从那里读取它。 相同的确切值,它不起作用。
我在本地调试它并发现我的变量:
var cookieName = Configuration.GetValue<string>("SharedCookies:CookieName");
这是在调用之前声明的,超出了我使用它的范围......即使我在它旁边声明的变量完全没问题。 我不知道这怎么可能,所以我想我会尝试移动声明:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
var cookieDomain = Configuration.GetValue<string>("SharedCookies:CookieDomain");
var cookieName = Configuration.GetValue<string>("SharedCookies:CookieName");
options.LoginPath = new PathString("/Account/SignIn");
options.Cookie.Name = cookieName;
options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
options.Cookie.Domain = cookieDomain;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
})
.AddOktaMvc(oktaMvcOptions);
而且...不,仍然不起作用。 我可以让它工作的唯一方法是直接输入域。 如果我逐行遍历代码,我会将其设置为与变量的值完全相同的值。 这太奇怪了。
如果有人对如何做到这一点有任何想法,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.