Asp.net mvc I';我同时使用Cookie和外部(Google)身份验证。当我登录谷歌时,我的cookie不会被创建。NET核心MVC6
因此,正如标题所说,我正在使用Cookies和谷歌进行登录/认证 Startup.cs Cookie片段Asp.net mvc I';我同时使用Cookie和外部(Google)身份验证。当我登录谷歌时,我的cookie不会被创建。NET核心MVC6,asp.net-mvc,cookies,oauth,asp.net-core,asp.net-core-mvc,Asp.net Mvc,Cookies,Oauth,Asp.net Core,Asp.net Core Mvc,因此,正如标题所说,我正在使用Cookies和谷歌进行登录/认证 Startup.cs Cookie片段 app.UseCookieAuthentication(options => { options.LoginPath = new PathString("/account/login"); options.AutomaticAuthenticate = true; o
app.UseCookieAuthentication(options =>
{
options.LoginPath = new PathString("/account/login");
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.ExpireTimeSpan = TimeSpan.FromDays(7);
options.CookieName = "CUSTOMCOOKIE";
});
app.UseGoogleAuthentication(options =>
{
options.AutomaticAuthenticate = true;
options.ClientId = "xx";
options.ClientSecret = "xx";
}
Startup.cs谷歌代码片段
app.UseCookieAuthentication(options =>
{
options.LoginPath = new PathString("/account/login");
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.ExpireTimeSpan = TimeSpan.FromDays(7);
options.CookieName = "CUSTOMCOOKIE";
});
app.UseGoogleAuthentication(options =>
{
options.AutomaticAuthenticate = true;
options.ClientId = "xx";
options.ClientSecret = "xx";
}
当我登录谷歌时,我的CUSTOMCOOKIE不会显示。基本上,我想做的是让用户使用谷歌登录到该网站,并使用cookie记住用户x天
有什么我遗漏的吗?我还尝试将“options.AuthenticationScheme=“Cookies”设置为Cookie片段,并将“options.AuthenticationScheme=“Google”设置为Google片段。您需要将Google选项的signnscheme设置为与主auth Cookie上的AuthenticationScheme相同,如下所示:
app.UseCookieAuthentication(options =>
{
options.LoginPath = new PathString("/account/login");
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.ExpireTimeSpan = TimeSpan.FromDays(7);
options.AuthenticationScheme = "CUSTOMCOOKIE";
options.CookieName = "CUSTOMCOOKIE";
});
app.UseGoogleAuthentication(options =>
{
options.AutomaticAuthenticate = true;
options.ClientId = "xx";
options.ClientSecret = "xx";
options.SignInScheme = "CUSTOMCOOKIE";
}
如果这不能让您继续,那么您需要显示用于google回调的帐户控制器的回调方法仅供将来参考,最新版本中的
app.UseCookieAuthentication
和app.UseGoogleAuthentication
方法的签名有一点变化-
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
LoginPath = new PathString("/account/login"),
AutomaticAuthenticate = true,
AutomaticChallenge = true,
ExpireTimeSpan = TimeSpan.FromDays(7),
AuthenticationScheme = "CUSTOMCOOKIE",
CookieName = "CUSTOMCOOKIE",
Events = new CookieAuthenticationEvents
{
OnRedirectToAccessDenied = (context) =>
{
context.Response.Redirect("/Auth/Logout");
return Task.FromResult(0);
}
}
});
app.UseGoogleAuthentication(new GoogleOptions
{
AutomaticAuthenticate = true,
ClientId = "xx",
ClientSecret = "xx",
SignInScheme = "CUSTOMCOOKIE",
CallbackPath = new PathString("/auth/signin-google")
}
乔,非常感谢!我错过了“重要的主题”。这让我成功地得到了饼干。但是,在ExternalLoginCallback方法中,在使用新的.NET核心项目生成的默认代码中,“await _signInManager.GetExternalLoginInfoAsync();”返回null。设置自定义登录方案时,这是正常行为吗?因为即使我从启动时获得了用户和声明,它也不会显示用户为“已登录”。我认为他们在GetExternalLoginInfo中所做的是返回一个challengeresult。有多租户中间件,但它也碰巧有一个简单的工作谷歌认证没有身份,这可能会帮助你。如果您使用的是Identity,那么您需要将google cookie的AuthenticationScheme设置为与identityoptions externalcookie相同,或者可能不指定AuthSChem和cookiename,并且默认设置将在您未找到文档的情况下起作用,这里有非常清楚的说明这正是我所寻找的。我早该知道Ben Foster会为此大惊小怪的。非常感谢你,伙计。你真的帮了我很多,帮了我很多忙。这段代码在VS2017中似乎不起作用。它甚至不编译。如果我修复了编译错误(如删除PathString包装),它会编译,但在Google验证后不会发生任何事情(仍然保留相同的登录屏幕)。如果我再次点击谷歌,这次访问被拒绝页面。结果表明SignInScheme/AuthenticationScheme不能是任意的,它必须是“Identity.External”。在AccountController中,出于某种原因,
\u signInManager.GetExternalLoginInfoAsync
会在内部将其与此精确值进行检查。。