当谷歌重定向到它抛出的回调方法时,我遇到了一些问题 异常:oauth 状态丢失或无效。
启动.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<Conte>(config =>
config.UseSqlServer(Configuration.GetConnectionString("Identity")));
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<Conte>()
.AddDefaultTokenProviders();
services.AddAuthentication()
.AddCookie("Cook")
.AddGoogle(config =>
{
config.SignInScheme = "Cook";
config.ClientId = Configuration["Authentication:Google:Client_Id"];
config.ClientSecret = Configuration["Authentication:Google:Client_Secret"];
config.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "UserId");
config.ClaimActions.MapJsonKey(ClaimTypes.Email, "EmailAddress", ClaimValueTypes.Email);
config.ClaimActions.MapJsonKey(ClaimTypes.Name, "Name");
});
services.AddMvc();
}
帐户控制器.cs
[AllowAnonymous]
[HttpGet]
[Route("/api/google-login")]
public async Task LoginGoogle()
{
await HttpContext.ChallengeAsync("Google", new AuthenticationProperties() { RedirectUri = "/signin-google" });
}
[AllowAnonymous]
[HttpGet]
[Route("/signin-google")]
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
var info = await _signInManager.GetExternalLoginInfoAsync();
// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true);
if (result.Succeeded)
{
return Redirect(returnUrl);
}
return BadRequest();
}
它转到 谷歌帐户
当我绑定授权时,我会抛出一个异常
根据 MS 的教程:
本教程后面配置的 Google 身份验证将自动处理/signin-google 路由上的请求,以实现 OAuth 流。
/signin-google 路由由中间件处理,而不是由您的 MVC 控制器处理。您的外部登录应该路由到类似/ExternalLoginCallback 的内容