[英]Receive JWT token from Google auth instead of receiving claims
我们正在使用 .NET Core 3.1 和 Google 身份验证。 这是我们目前的代码:
启动.cs:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddGoogle(googleOptions =>
{
googleOptions.ClientId = "CLIENT_ID"
googleOptions.ClientSecret = "CLIENT_SECRET"
})
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
options.AccessDeniedPath = "/Error/403";
});
帐户控制器.cs:
public class AccountController : BaseController
{
[AllowAnonymous]
public IActionResult SignInGoogle()
{
return Challenge(new AuthenticationProperties
{
RedirectUri = Url.Action(nameof(SignInReturn))
}, GoogleDefaults.AuthenticationScheme);
}
[AllowAnonymous]
public IActionResult SignInReturn()
{
// Do stuff with the user here. Their information is in the User
// property of the controller.
return Ok();
}
}
当用户访问/Account/SignInGoogle
时,他们将被重定向到 Google 登录页面。 一旦他们成功登录,他们将被重定向回/Account/SignInReturn
。 如果我在那里放置一个断点,我可以看到声明是在User
属性中设置的。
但是,我们不希望自动设置User
属性。 我们也不希望在调用SignInReturn
用户视为已登录。 我们只想接收有关用户的信息(名字、姓氏、电子邮件),然后继续我们的自定义索赔处理逻辑。 是否可以?
Google 身份验证使用 OAuth2 协议。 Google 身份验证 package 只是将 OAuth 包装在 AuthenticationBuilder 设置中。 通过使用任何 OAUth2 库,您可以在 AspNetCore AuthenticationBuilder 外部进行身份验证并检索 JWT。
另请参阅: 什么是最好的 OAuth2 C# 库?
您可以通过处理OnCreatingTicket
事件来访问令牌:
googleOptions.Events.OnCreatingTicket = (context) =>
{
string accessToken = context.AccessToken;
string refreshToken = context.RefreshToken;
// do stuff with them
return Task.CompletedTask;
}
请注意,除非您指定googleOptions.AccessType = "offline";
即使这样,您也只有在第一次同意时才能获得它们(如果您需要刷新令牌,则可以触发重新同意)。
或者您可以遵循 Microsoft 提出的方法,该方法基本上将令牌保存在 cookie 中。 您可以在此处的文档中阅读相关内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.