首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keycloak中的授权机制在数据库中查找角色/权限

Keycloak中的授权机制在数据库中查找角色/权限
EN

Stack Overflow用户
提问于 2020-09-16 15:04:19
回答 1查看 748关注 0票数 1

我需要在Keycloak中实现授权机制,它在客户的数据库中查找基于角色的用户权限。

我不能在Keycloak的管理控制台中管理这样的角色和权限,但我必须编写一些SPI来实现我的授权逻辑。类似于实现一个用户存储提供程序,以便在数据库中查找用户/密码身份验证。

但我找不到如何实现它。我认为,在身份验证过程中获得用户的有效令牌后,应用程序应该将该令牌与执行操作所需的权限一起发送,以便Keycloak (我自己的SPI实现)将验证令牌并搜索DB以授予权限。

也许授权的流程和我想的不一样(我之前写的)。

任何线索都将不胜感激。

应用程序应该如何将token +权限发送到Keycloak?

如何实现响应此类请求并验证令牌的SPI?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-16 21:06:09

回答你的第一个问题: Keycloak将为你处理授权流程,你不需要担心这一部分。您所需要做的就是通过实现UserStorageProvider接口的方法来为用户提供Storage SPI。密钥罩文档:https://www.keycloak.org/docs/latest/server_development/index.html#_user-storage-spi

要添加角色/权限,您需要实现UserModel接口,该接口具有处理角色/权限的方法。密钥罩文档:https://www.keycloak.org/docs/latest/server_development/index.html#model-interfaces

要将这两者结合起来,需要使用UserStorageProvider从Oracle DB获取用户记录,并填写UserModel字段(电子邮件、姓名、角色等)。

Ex伪代码:

注意:有关更详细的演练,请查看keycloak文档:https://www.keycloak.org/docs/latest/server_development/index.html#simple-read-only-lookup-example

代码语言:javascript
复制
public class OracleDbUserStorageProvider implements UserStorageProvider, UserLookupProvider {

   private Map<String, UserModel> loadedUsers = new HashMap<>();

   private OracleDbRepository oracleDbRepository;

​   @Override
   ​public UserModel getUserByUsername(String username, RealmModel realm) {
       ​UserModel user = loadedUsers.get(username);
       ​if (user == null) {
           ​OracleUser oracleUser = oracleDbRepository.getUser(username);
           ​if (oracleUser != null) {
               ​user = convertToUserModel(oracleUser);
               ​loadedUsers.put(username, user);
           ​}
       ​}
       ​return user;
   ​}

   private UserModel convertToUserModel(OracleUser oracleUser) {
        // take oracleUser attributes and assign to a UserModel instance
        return userModel; // user model converted
   }

}

希望这篇文章能帮你找到正确的方向。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63914808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档