我已经搜索了不同的SO答案以及GIT上的Aspnetcore身份验证,但是没有一种解决方案有帮助。我有一个“关联失败”的问题,原因是关联cookie没有设置,即使它很明显位于重定向到Google的响应标头中。 enter image description here
这是提琴手的回答:
找到HTTP / 1.1 302 位置:https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=996823962179-1vvr5h2icjroveset9849e8aqdks1g66.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Flocalhost%2Fsignin-google&scope=openid%20profile%20email&state=CfDJ8EGRdEf8M7VDtyNKY6R10TxxM2kHFoDlOBkCQKoMQJXX3QPKcyH8quz80oy8Wd7Rq1Nnb-KhklzrC-XK4WOhikAVtJuFHIk_M4ZvLY8Le2FkjVNxJrHDsZeg7o1sMrABd_md1jxi-LelhURiB54SUAHbaJciseDc5NP897CSsrtYoPt_IWyqNOdxCjPntxwHYUzO2ZxIcfSLaLGu8rWlfHTEqvj_N7KQ0k8HQ8VwPYDXjAMwjjsGRdxR6dOl-vNfzfOqX0wZelvVsX5UIfzMjlCJ20lQxLIhlkhkpne14EYYNkJufqF4ZADD13jvsj4qnw 服务器:红est Set-Cookie:.AspNetCore.Correlation.Google.WKzW6di96f3Fbh4ThkfIFHteUvNLusesaT0VjAMhrDU = N; expires = 2018年11月17日星期六格林尼治标准时间; path = / signin-google;安全; samesite = strict; httponly Set-Cookie:.AspNetCore.Mvc.CookieTempDataProvider =; expires =星期四,格林尼治标准时间1970年1月1日00:00:00;路径= /;安全; samesite = strict; httponly 日期:2018年12月28日星期五03:45:54 GMT 内容长度:0
我将dataprotection设置为将密钥存储到一个位置,并且按预期工作。我的源代码控制在这里: https://github.com/jjkesinger/charts/tree/master/Charts
有什么想法吗?本地计算机上的TLS与它有关系吗?我可以将此项目克隆到另一台计算机上,并且工作正常。不在使用的计算机是Windows 10戴尔体验
答案 0 :(得分:4)
我也遇到了这个问题,必须设置以下选项:
services.AddAuthentication().AddGoogle(g =>
{
g.ClientId = XXXXXXX;
g.ClientSecret = XXXXXX;
g.CorrelationCookie.SameSite = SameSiteMode.Lax
}
最后一行解决了我的问题。
答案 1 :(得分:0)
尽管在您的情况下,真正的问题是您有一个samesite=strict
的Cookie策略,但此错误通常的含义是在应用程序注册处定义的REDIRECT_URI
身份提供者与options.CallbackPath
中提供的值不相关(不匹配)。
我认为他们说的是“相关”而不是“匹配”,因为它不必是相同的字符串。在下面的示例中,我仅提供/signin-microsoft
,因为这与http://localhost:5000/signin-microsoft
和https://production-domain-name/app-path.../signin-microsoft
都相关,两者都在Azure上的应用程序注册中定义。
.AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
// SET THIS TO CORRELATE WITH REDIRECT_URI THAT YOU
// DEFINED IN THE APP REGISTRATION AT THE APP PROVIDER
microsoftOptions.CallbackPath = "/signin-microsoft";
})
尽管从技术上讲是合理的,但这是一条非常无用的异常消息。他们没有理由不会说WRONG CALLBACK PATH Provider did not call back on the path specified in options.CallbackPath Ensure REDIRECT_URI in app registration at provider correlates to the value supplied in options.CallbackPath
所有示例均未指定回调路径,因此很可能很多人根本不提供回调路径(也导致此问题)。
答案 2 :(得分:0)
我已经为这个问题解决了一个多星期,终于在Auth0服务台上从Tanver获得了解决方案。 SameSite。没有要求您run your web server (even localhost) via https。解决了我的问题!
答案 3 :(得分:0)
SamesiteMode.Lax不会立即登录
您需要使用以下代码:
.AddGoogle(o =>
{
o.ClientId = _configuration.GetValue<string>("ClientId");
o.ClientSecret = _configuration.GetValue<string>("ClientSecret");
o.SignInScheme = IdentityConstants.ExternalScheme;
o.CorrelationCookie.SameSite = SameSiteMode.Unspecified;
})
它有效!