我们有一个本地的身份验证和授权解决方案,并且我们想过渡到罐头身份提供商,例如Keycloak。是否有任何文档和/或媒体讨论了将Identify Provider(例如Keycloak)(例如,这种环境)与现有用户和密码等集成的最佳方法?预先感谢您提供的任何帮助和/或指示。
答案 0 :(得分:0)
这个问题有点广泛,但是我可以解决我过去所做的一个领域。我转换了一个具有明文密码(存储在数据库(!)中)的解决方案,以使用Keycloak。明文密码使创建新用户变得简单。我使用了基于角色的环境,并在创建领域之后使用kcadm.sh
命令行创建了角色和用户。我的脚本看起来像:
#!/bin/bash
kcadm.sh config credentials --server http://localhost:8180/auth --realm master --user admin --password the-admin-password
kcadm.sh create realms -s realm=therealm -s enabled=true -o
kcadm.sh create roles -r therealm -s name=employee -s 'description=Role to that is used by employees'
kcadm.sh create users -r therealm -s username=somebody@domain.tld -s email=somebody@domain.tld -s lastName=Body -s firstName=Some -s 'credentia
ls=[{"type":"password", "value": "the-user-password"}]' -s 'enabled=true' -s 'emailVerified=true'
kcadm.sh add-roles --uusername somebody@domain.tld --rolename employee -r therealm
这使我可以创建基本用户组。这些用户位于“本地”数据库中,而不是Google或Microsoft这样的第三方。当然,如果您没有用户密码,则可以创建一个脚本来生成一个临时密码并将其通过电子邮件发送给用户。然后,您想设置用户以强制更改密码。
此转换是Java Webapp中的一组JAX-RS Web服务,最终使用了自定义ContainerRequestFilter
,使我能够拉出JWT并为用户创建自定义Principal
。我确定也可以使用“正常”的servlet过滤器。
答案 1 :(得分:0)
您也可以要求所有用户创建一个新密码-因为每个用户只会创建一次新密码-如果此密码对您有用,那么我的帖子可能会帮助您理解各种选择: