[英]I want to Update User Claims in IdentityServer4 (.NET Core 3.1)
我想刷新身份服務器 4 中的用戶聲明。我在身份服務器項目中創建了一個 API 端點。 下面給出了這個 API 端點。 之后,我使用 oidc-client.js 庫從我的 Angular 客戶端調用 UserInfoEndpoint 和 RefreshTokenEndpoint。 我得到了 refreshtoken 和新的 accesstoken,但響應中的聲明是舊的。 我必須重新登錄我的客戶端和身份服務器才能重新加載更新的聲明。
if (ModelState.IsValid && model.IsSelected && User.Identity.IsAuthenticated)
{
var user = _userRepository.GetUserByAppId(model.UserId);
user.AccessCode = model.Code; // A simple 3 digit code
var updatedUser = _userRepository.UpdateUser(user); //updating it in the dB
var claimsResult = _userRepository.GetUserClaims(updatedUser);
if (!claimsResult.IsSuccess)
{
return BadRequest(new { Status = false, Message = "Failed To Change" });
}
var identity = User.Identity as ClaimsIdentity;
string[] claimsTobeUpdated = { "AccessCode" };
foreach (var item in identity.Claims.ToList())
{
if (claimsTobeUpdated.Contains(item.Type))
{
identity.RemoveClaim(item);
var claim = claimsResult.Claims.Where(p => p.Type == item.Type).FirstOrDefault();
identity.AddClaim(claim);
}
} // I was updating more than one claims thats why I'm iterating
AuthenticationProperties props = new AuthenticationProperties()
{
IsPersistent = true,
ExpiresUtc = DateTimeOffset.UtcNow.Add(AccountOptions.RememberMeLoginDuration),
};
// issue authentication cookie with subject ID and username
var isuser = new IdentityServerUser(user.Id.ToString())
{
DisplayName = user.Name,
AdditionalClaims = claimsResult.Claims.ToList(),
};
await HttpContext.SignInAsync(isuser, props);
var claims = User.Identity as ClaimsIdentity; // here I've checked that the claims updated or not and these are updated.
return Ok(new { Status = true, Message = "Changed Successfully" });
}
我想在我的身份服務器 session 以及 API 和 Ng session 中擁有相同的聲明。 如果您能幫助我,將不勝感激。
您應該在 Identity Server 中檢查您的客戶端 api 的設置。( https://docs.identityserver.io/en/3.1.0/topics/refresh_tokens.ZFC35FDC70D5FC69D2698Z3A82E )
檢查此屬性 ( UpdateAccessTokenClaimsOnRefresh
) 是否設置為 true。
此值指示是否應在刷新令牌請求時更新訪問令牌(及其聲明)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.