[英]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.