有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我需要在keydape中实现授权机制,它根据角色查看客户的数据库中的用户权限

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

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

也许授权流程与我的想法(我以前写的)不同

任何线索都将不胜感激

应用程序应如何将令牌+权限发送到KeyClope

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


共 (1) 个答案

  1. # 1 楼答案

    要回答您的第一个问题:keydepeat将为您处理授权流,您不必担心这一部分。您所需要做的就是通过实现UserStorageProvider接口的方法来提供用户存储SPI。 keydepate文档: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数据库获取用户记录,并填写UserModel字段(电子邮件、姓名、角色等)

    Ex伪代码:

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

    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
       }
    
    }
    

    希望这能帮你找到正确的方向