-1

因此,我正在构建我的第一个项目,该项目将用于中高流量的生产环境。

我决定使用 Keycloak 作为 IdP,NodeJS 作为后端,React 到前端(都在 TypeScript 上)。对于后端,我想使用承载令牌作为身份验证。

当我一直在研究 Keycloak 时,我发现它使用 JWT 令牌填充了来自用户的数据。我还偶然发现了一些建议反对将 JWT 令牌与来自用户的数据一起使用的人。

老实说,这些观点对我来说似乎很有效——但是现在,当使用 Keycloak 时,我有什么替代方法呢?好的,如果我使用自己的身份验证和授权系统,我猜我可以使用经典会话。但我不知道如何在 Keycloak 中实现它们。另外,我觉得很奇怪,像 Keycloak 这样流行和大的东西会使用默认情况下不好的东西(JWT)——所以我不确定我是否应该改变这个机制。

所以,我的问题是:

将 JWT 令牌与用户数据一起使用是否安全?(Keycloak 的默认设置)如下所示:

{
  exp: 1645637327,
  iat: 1645601327,
  jti: 'removed',
  iss: 'http://localhost:8080/auth/realms/supercatalog',
  aud: 'account',
  sub: 'removed',
  typ: 'Bearer',
  azp: 'restapi',
  session_state: '2434f33d-73c4-4f38-8c80-e92356380ffa',
  acr: '1',
  'allowed-origins': [ '' ],
  realm_access: {
    roles: [
      'app-elev',
      'offline_access',
      'uma_authorization',
      'default-roles-supercatalog'
    ]
  },
  resource_access: { restapi: { roles: [Array] }, account: { roles: [Array] } },
  scope: 'email profile',
  sid: 'removed',
  email_verified: false,
  preferred_username: 'elev'
}

如果没有,在仍然使用 Keycloak 的同时,还有什么替代方案?

4

1 回答 1

-1

您可以将 access/id-token 中的用户信息保持在最低限度,然后让应用程序或 API 分别查询 UserInfo 端点以获取所有用户详细信息。令牌中的数据非常开放,因此如果将其发送到浏览器或用户可以访问,那么这可能是一个问题。但如果它都在你的后端,那么问题就更少了。

Keycloak 的 OAuth2 / OpenID Connect 端点是什么?

于 2022-02-24T13:26:52.303 回答