Aspnetcore身份验证关联失败

时间:2018-11-17 16:04:03

标签: asp.net-core

我已经搜索了不同的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.WKzW6d​​i96f3Fbh4ThkfIFHteUvNLusesaT0VjAMhrDU = 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戴尔体验

4 个答案:

答案 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-microsofthttps://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;
    }) 

它有效!