【问题标题】:Cannot get Username / given_name when using angular-oauth2-oidc and Identity Server 4使用 angular-oauth2-oidc 和 Identity Server 4 时无法获取用户名/给定名称
【发布时间】:2019-01-11 07:09:48
【问题描述】:

我正在关注 angular-oauth2-oidc 文档中的隐式工作流示例。

在我的 Angular 应用程序中一切正常,我可以登录(在此期间我被重定向到 Identity Server),获取我的令牌并使用此令牌访问我的 Web Api。

但是,我注意到“given_name”声明为空,因此登录页面上不显示用户名。具体来说,示例代码中的以下方法似乎返回 null:

public get name() {
    let claims = this.oauthService.getIdentityClaims();
    if (!claims) return null;
    return claims.given_name;
}

我认为这可能是权限问题,但我的范围设置为:

scope: 'openid profile email api1',

知道我需要更改什么来获得这个“given_name”声明吗?

【问题讨论】:

  • 你解决了吗?我遇到了同样的问题,我不确定在按照 angular-oauth2-oidc 中的步骤操作后我做错了什么。即使在我登录身份服务器后,claims.given_name 也始终为空。
  • 我想通了。我通过在客户端设置中将“AlwaysIncludeuserClaimsInIdToken”的值设置为 true 解决了我的问题
  • @SetrákusRa 很好,很高兴听到您找到了解决方案。也许将其作为答案发布,以便其他人可以轻松发现?
  • 杰罗恩,感谢您的提醒!我把它贴在答案部分。希望这可以帮助可能遇到相同问题的其他人。

标签: identityserver4 angular-oauth2-oidc


【解决方案1】:

OauthService.getIdentityClaims() 是一个 Promise 并持有 UserInfo 您可以提取带有大括号的名称字段,因此您的函数应该是:

public get name() {
    let claims = this.oauthService.getIdentityClaims();
    if (!claims) return null;
    return claims['name'];
}

【讨论】:

    【解决方案2】:

    标记为“最佳答案”的答案不正确。在'idtoken'中获取用户声明会导致'idtoken'非常大,然后你可能会超过大小限制。

    正确的实现是使用'UserInfo'端点,然后使用方法'loadUserProfile':

    例子:

    getUserClaims() {
        const user = this.oauthService.loadUserProfile();
        console.log(user, user);
    }
    

    【讨论】:

      【解决方案3】:

      对于那些遇到同样问题的人。您可以通过在身份提供者端的client settings 中添加此行AlwaysIncludeuserClaimsInIdToken=true 来修复它。

      【讨论】:

      • 当我将该行添加到我的配置并再次运行解决方案时,它起作用了,我的 given_name 现在已填充!谢谢。
      • 我正在尝试查找“AlwaysIncludeuserClaimsInIdToken”,但似乎找不到。有任何想法吗?谢谢
      • @Setrákus Ra - 我在哪里可以在上面的共享代码中添加/配置这个“AlwaysIncludeuserClaimsInIdToken=true”设置..?
      • @Setrákus Ra - 你能分享我如何设置客户端吗?
      • 还想知道客户端设置在哪里?
      猜你喜欢
      • 2020-04-11
      • 2021-05-18
      • 1970-01-01
      • 2018-10-06
      • 2022-06-14
      • 2014-04-19
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      相关资源
      最近更新 更多