【问题标题】:Is it safe to use "sub" claim in keycloak token for user id in internal DB在 keycloak 令牌中为内部数据库中的用户 ID 使用 \"sub\" 声明是否安全
【发布时间】:2022-12-29 16:08:54
【问题描述】:

我正在开发一个将来可能支持社交登录的应用程序(除了我们自己的 keycloak 用户名/电子邮件注册之外)。

我正在尝试确定使用 keycloak ID 令牌中的“sub”声明作为我们内部 mongo 数据库中用户的主键(“_id”字段)是否安全。理想情况下,我希望使用令牌中的 id,因为在某些情况下,它可以让我无需在我们的 api 中进行额外的用户查找。

我看到 Microsoft azure 文档显示他们的身份验证令牌同时具有“sub”和“oid”,其中建议将“oid”用于内部用户查找,因为它是全球唯一的。 See this section。

此 ID 跨应用程序唯一标识用户 - 登录同一用户的两个不同应用程序将在 oid 声明中收到相同的值。 Microsoft Graph 将返回此 ID 作为给定用户帐户的 id 属性。

那么在 keycloak 中是否有等效的“oid”声明,我是否需要添加自定义声明来实现等效,或者我可以只使用“sub”声明?

【问题讨论】:

    标签: authentication oauth-2.0 jwt keycloak openid-connect


    【解决方案1】:

    查看JSON Web Token (JWT)文档,即“sub”(主题)声明部分:

    4.1.2. “sub”(主题)声明

    “sub”(主题)声明标识作为 JWT 主题的主体。 (...)。主题值必须在发行人的上下文中限定为本地唯一或全局唯一.这个索赔的处理是一般具体应用. (...)。使用此声明是选修的.

    仅从我对这段文字的解释来看,不能保证给定用户的 sub 声明在不同的应用程序中是相同的(IE。,客户)。此外,该声明是可选的。

    所以为了准确回答你的问题,我们需要看看 OpenID connect的上下文:

    OpenID Connect 对 OAuth 2.0 进行的主要扩展,以使最终用户能够进行身份验证是 ID 令牌数据结构。

    子:必需的.主题标识符。最终用户在发行人中的本地唯一且永不重新分配的标识符,旨在由客户使用(...)。

    好吧,根据这段文字以及要获得 ID Token 必须将 openid 范围传递给请求这一事实,您可以确定 sub 声明将出现在 ID Token 中。

    关于 sub 是否对所有客户都相同的问题,这也在同一文档的 Subject Identifier Types 部分下解决:

    主题标识符类型

    主题标识符是本地唯一的并且永远不会重新分配 最终用户在发行人中的标识符,旨在由客户使用。

    本规范定义了两种主题标识符类型:

    民众- 这提供了对所有客户具有相同的子(主题)值.如果提供者在其发现文档中没有 subject_types_supported 元素,则这是默认值。

    成对的- 这提供了一个不同的子 对每个客户的价值,以免使客户将 最终用户未经许可的活动。

    OpenID 提供商的 发现文档应该列出其支持的主题标识符类型 在 subject_types_supported 元素中。如果有不止一种类型 在数组中列出,客户可以选择提供其首选 在注册期间使用 subject_type 参数的标识符类型。

    Since a while 现在,keycloak 支持public 和pairwise 主题标识符类型。如果没有明确指定 public 是默认使用的。

    所以总结一下:

    或者我可以只使用“子”声明吗?

    是的,只要您考虑到正在使用的主题标识符类型。

    【讨论】:

      【解决方案2】:

      主题值必须限定为locally unique in the context of the issuer 或全局唯一。

      所以“sub”(主题)Claim 和“iss”(Issuer)Claim 的组合始终是全局唯一的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-15
        • 2012-10-10
        • 2019-03-23
        • 2022-01-19
        • 2020-06-14
        • 2020-06-24
        • 2015-12-18
        • 2021-12-31
        相关资源
        最近更新 更多