【发布时间】:2023-03-13 14:58:02
【问题描述】:
java ee 应用程序(部署到wildfly)在数据库中为不同用户存储敏感数据,如访问密钥等。为了解密这些数据 - 它需要一个与当前用户关联的主密码。用户登录应用程序时输入的密码用于此目的。
现在我正在考虑使用 keycloak 来保护这个应用程序的可能性。但看起来没有办法使用 keycloak 获取当前登录用户的密码(因为它使用令牌操作)?要求用户在应用程序中再次输入密码不是一种选择。
问题是 - 是否可以配置 keycloak 以在令牌中为当前用户提供一个不会未加密存储在 keycloak 数据库中的常量(秘密)值?
【问题讨论】:
-
Keycloak 很可能将密码存储为one-way hash。几乎不可能将其解密回原始密码。
-
例如,Picketlink 允许访问当前用户凭据。至于我打算在同一个容器中运行 keycloak 和应用程序 - 如果 keycloak 可以将密码返回给应用程序,我会很高兴。
-
您是否研究过 Keycloak 的断言? keycloak.github.io/docs/userguide/saml-client-adapter/html/… stackoverflow.com/a/32890003 您可以为每个用户存储加密密钥。至于加密密钥,可能需要研究 DBMS 加密来处理这种情况。
-
感谢您的建议,您能详细说明一下吗?我知道可以向 KeycloakPrincipal 添加任何自定义属性。 SAML 断言在这里有什么帮助?但问题是这些属性是否可以在 keycloak 数据库中加密。一旦 keycloak DB 与主 DB 位于同一位置 - 它需要使用相同的加密方法 - 它应该使用用户密码进行加密。我不太确定是否可以配置 keycloak 来做到这一点。
标签: jakarta-ee jboss wildfly keycloak