.net核心自定义oauth2登录名和Google登录api一起出错

时间:2018-09-04 11:19:22

标签: asp.net-core oauth-2.0

我正在使用.net core 2,并添加Google的AddAuthentication()和自定义的oauth 2登录api

但是这两个认证都出错 谷歌说:

  

异常:oauth状态丢失或无效。

自定义登录说:

  

重定向URI不匹配。

当我从启动文件中禁用(注释)自定义登录api时 并使用唯一的Google登录API 一切都很好

services.AddAuthentication()
            .AddOAuth("test", options =>
            {
                options.ClientId = "..Id...";
                options.ClientSecret ="..Secret..";
                options.CallbackPath = new PathString("/Account/ExternalLoginCallback");

                options.AuthorizationEndpoint = "https://example.com/oauth/authorize";
                options.TokenEndpoint = "https://example.com/oauth/token";
                options.UserInformationEndpoint = "https://example.com/oauth/api/o";

                options.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
                options.ClaimActions.MapJsonKey(ClaimTypes.Email, "EmailAddress", ClaimValueTypes.Email);

                options.Events = new OAuthEvents
                {
                    OnCreatingTicket = async context =>
                    {
                        var request =
                            new HttpRequestMessage(HttpMethod.Get, context.Options.UserInformationEndpoint);
                        request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                        request.Headers.Authorization =
                            new AuthenticationHeaderValue("Bearer", context.AccessToken);

                        var response = await context.Backchannel.SendAsync(request,
                            HttpCompletionOption.ResponseHeadersRead, context.HttpContext.RequestAborted);
                        response.EnsureSuccessStatusCode();

                        var user = JObject.Parse(await response.Content.ReadAsStringAsync());

                        context.RunClaimActions(user);
                    }
                };
            })
            .AddGoogle(googleOptions =>
            {
                googleOptions.ClientId = Configuration["Authentication:Google:ClientId"];
                googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
            });

我的代码是否有问题,或者对此问题有解决方案?

1 个答案:

答案 0 :(得分:0)

在我的情况下,

问题是在CallbackPath和模式中 我检查了AuthorizationEndpoint,TokenEndpoint,UserInformationEndpoint 与邮递员一起找到一些问题,解决了这些问题,一切都很好。