关于Red Hat Single Sign-On的User Storage SPI

上一篇文章把Red Hat Single Sign-On的基本流程走通了,但是遗留4个问题:

1:用户应该是来自我们应用系统的数据库,而不是在hm sso(Red Hat Single Sign-On,下面简称hm sso)里创建。

2:用户的鉴权也就是权限校验用的应该是应用系统的权限结构,而不是在hm sso里创建。

3:通常项目都是springboot项目,除非是大厂规范用jboss,所以要把war加jboos容器的模式改为spirngboot,其实我倒是觉得如果是springboot,那还不如直接用Spring Authorization Server。

4:登录页面用的应该是应用系统的登录页面而不是rh sso的默认登录页面。

下面针对上面提出的第一个问题做扩展,后面再解决其他的问题:

hm sso连接外部用户数据库要用到是用户存储接口 User Storage SPI:

你需要写一个UserProvider实现对应的接口:第 7 章 User Storage SPI Red Hat Single Sign-On 7.6 | Red Hat Customer Portal

这里针对几个重要的接口注意点说明:

org.keycloak.storage.user.UserLookupProvider,如果要能够使用此外部存储的用户登录,则需要这个接口。大多数(全部)需要实现此接口,可以说它是基础接口。

org.keycloak.storage.user.UserQueryProvider,定义用于查找一个或多个用户的复杂查询。如果要从hm sso管理控制台查看和管理用户,则需要实现它。下面是其中个方法实现。

org.keycloak.storage.user.UserRegistrationProvider,如果您的UserProvider支持添加和删除用户,则实现此接口。

org.keycloak.storage.user.UserBulkUpdateProvider,如果您的UserProvider支持一组用户的批量更新,则实现它。

org.keycloak.credential.CredentialInputValidator,如果您的UserProvider可以验证一个或多个不同的凭证类型(例如,如果您的供应商可以验证密码),需要实现此接口。下面是其中个方法实现。

org.keycloak.credential.CredentialInputUpdater,如果您的UserProvider支持更新一个或多个不同的凭证类型,则实现此接口。下面是其中个方法实现。

我们应用系统的用户要映射成hm sso的用户,就需要一个UserAdper,它继承 AbstractUserAdapterFederatedStorage后重写对应的get和set完成两边user的适配

还有就是UserStorageProviderFactory,工厂模式提供UserProvider的实列,getId()就是我们的UserProvider实例的名称了:

下面简单说说工程的搭建:

官方的列子是jpa 依照jdbc的实现,这个对很多人来说可能不习惯,比如我自己

比起mybatis-plus还是差点意思,但是mybatis-plus我也不想用了,正好前段时间都在炒mybatis-flex,借这次机会就了解一波,对于这种持久层的框架要学就要抛开spirng单独使用,这也正好 符合这个场景,一是就通过官网找到源码浏览了起来,Mybatis-Flex-Samples: Mybatis-Flex 的示例代码仓库 (gitee.com)

怎么样,太方便了,直接把native考出来使用就好,使用方式也是一目了然,至于代码生成什么的都一个样。

过程中还是要注意hm sso maven依赖仓库的配置以及用到的包,这个用它官方例子里的地址就好,

最重要的是jar的要求,这点要确认好,打完包后可以反编译看下

META-INF.service下面要有它

build插件可以可以参考:

<build>
    <finalName>mybatis-flex-native</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <appendAssemblyId>false</appendAssemblyId>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>

最后把jar包放到hm sso的部署目录下,启动hm sso

到控制台可以看到UserProvider已经装上了

直接save即可

到users下面点view all users 可以看到我们从数据库加载出来的user,当然如果不是实现UserQueryProvider的话这里是不会出来的。到此通过User Storage SPI加载外部user就完了。下面是项目地址:repo/mybatis-flex-native at master · stevensu1/repo (github.com)

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值