我正在使用.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"];
});
我的代码是否有问题,或者对此问题有解决方案?
答案 0 :(得分:0)
问题是在CallbackPath和模式中 我检查了AuthorizationEndpoint,TokenEndpoint,UserInformationEndpoint 与邮递员一起找到一些问题,解决了这些问题,一切都很好。