【问题标题】:How to customize the cookie generator of identityserver? (add claims into token but not into cookies)如何自定义identityserver的cookie生成器? (将声明添加到令牌中,但不添加到 cookie 中)
【发布时间】:2022-09-24 15:01:44
【问题描述】:

我正在使用 IdentityServer 并且我有一个 React 客户端。因此,当我在检查凭据后尝试登录客户端时,IDP 会在我的浏览器中生成一些 cookie。我阅读了这些 cookie(尤其是 .AspNetCore.Identity.Application cookie)并发现一些用户信息存储在这些 cookie 中,例如声明和角色。 所以我想自定义cookie生成器并从那里删除一些无用的信息。有两个问题:

1-如何用自定义的 cookie 生成器替换默认的 cookie 生成器?

2-是否需要任何其他流程的声明和角色,或者我可以毫无顾虑地删除?

  • 您是否实施了ProfileService?通常GetProfileDataAsync 是声明嵌入令牌等的地方。如果您清除ProfileDataRequestContext.IssuedClaims,那么您的cookie 不应包含任何声明。
  • 不,我没有重新实现它。我认为 Idp 使用的是默认值。但这是一个很好的提示。我没有测试它,但你确定清除ProfileDataRequestContext.IssuedClaims 对我的令牌没有任何影响吗?我需要我的令牌上的声明,而不是我的 cookie
  • 我检查了它,它会从索赔中删除索赔。

标签: c# asp.net-core duende-identity-server


【解决方案1】:

我找到了解决方案: 我们可以使用link 自定义身份验证 cookie。

如果我想总结这篇文章,您应该更改登录操作伙伴:

1-如果您使用的是PasswordSignInAsync,则应将其更改为CheckPasswordSignInAsync,因为第一个使用默认的cookie生成工作流程,但第二个没有创建cookie的操作。

2- 要创建 cookie,您应该使用 HttpContext.SignInAsync 方法。它将为您生成身份验证 cookie。请记住,SubId 是必须包含在 cookie 中的必需声明。这是我的代码的 cookie 生成器部分:

var claims = new List<Claim> { new Claim(JwtClaimTypes.Subject, user.Id.ToString()) };
claims.Add(new Claim(ClaimTypes.Name, user.UserName));
claims.Add(new Claim("user_type", $@"{user.UserType}"));
var claimIdentity = new ClaimsIdentity(claims, "pwd");
await HttpContext.SignInAsync("Identity.Application",new ClaimsPrincipal(claimIdentity),new AuthenticationProperties
                            {
                                IsPersistent = true
                            });
                         

【讨论】:

    猜你喜欢
    • 2019-03-24
    • 1970-01-01
    • 2019-11-14
    • 2018-02-09
    • 1970-01-01
    • 2021-11-14
    • 2020-07-06
    • 2019-11-20
    • 1970-01-01
    相关资源
    最近更新 更多