簡體   English   中英

從 Google 身份驗證接收 JWT 令牌而不是接收聲明

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM