簡體   English   中英

如何更新存儲在 .NET Core 6 中的身份驗證 cookie 中的用戶聲明

[英]How to update user claims stored in authentication cookie in .NET Core 6

我有一個使用 .NET Core 6 開發的 Razor Pages 應用程序。該應用程序用作客戶端並連接到 API。 API 具有 JWT 訪問令牌/刷新令牌身份驗證。 API 的登錄端點返回訪問令牌和刷新令牌。使用cookie 身份驗證我將令牌作為聲明存儲在身份驗證 cookie 中。

var claims = new List<Claim>
        {
            new Claim(ClaimTypes.Name, Login.Email),
            new Claim("Token", loginResponse.Token),
            new Claim("RefreshToken", loginResponse.RefreshToken)
        };

然后我使用擴展方法獲取令牌

public static class CommonExtensions
{
    public static string? GetToken(this HttpContext context)
    {
        return context.User.Claims.Single(x => x.Type == "Token").Value.ToString();
    }

    public static string? GetRefreshToken(this HttpContext context)
    {
        return context.User.Claims.Single(x => x.Type == "RefreshToken").Value.ToString();
    }
}

當我的訪問令牌過期時,我會刷新它,刪除現有聲明並使用更新的令牌添加新聲明。

var identity = User.Identity as ClaimsIdentity;
identity.RemoveClaim(identity.FindFirst("Token"));
identity.AddClaim(new Claim("Token", response.Token));

identity.RemoveClaim(identity.FindFirst("RefreshToken"));
identity.AddClaim(new Claim("RefreshToken", response.RefreshToken));

但是,后續請求繼續使用過期的令牌。 正確更新聲明的方法是什么?

為了保存您的更改,您需要根據Microsoft調用SignInAsync

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, User);

如果它不起作用,也許您需要先調用SignOutAsync

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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