3 回答
TA贡献1886条经验 获得超2个赞
万一有人遇到这样的问题:
由于 META-INF/services 文件夹,UserStorage SPI 未显示。它在文档中提供,但不清楚
在 src/main/resources 中,创建文件夹结构 META-INF/services
在 META-INF/services 目录中创建一个名为 org.keycloak.storage.UserStorageProviderFactory 的文件(整个就是文件名)。它的内容是您的 SPI 的完全限定类名:com.test.UserSpi
TA贡献1818条经验 获得超8个赞
好的,您已阐明您需要一个用户存储提供程序 API。伟大的
现在关于你的第二个“问题/挑战”:
从外部数据源中检索一些属性,将其映射到 keycloak 的 id 和访问令牌。需要检索用户唯一 ID 并将其添加为 jwt 中的主题 ID。这是 id,当此令牌传递给其他服务时,其余服务可用于检索 id。
为此,你能做的最好的事情是:
添加这些用户的唯一数据作为用户属性(在管理控制台上查看)
在 Keycloak 上创建一个“客户端范围”,使用“用户属性”的映射器将您想要(从您的用户)添加的那些属性映射到您的 Id-token 和 access-token。您还需要将您的客户与您刚刚创建的“客户范围”联系起来。
TA贡献1895条经验 获得超3个赞
我不确定你需要什么。让我们从区分 Authentication SPI(联合身份检查)和 User Provider SPI(联合用户)开始。第一个(文档的第 8 节 - 更多地关注针对外部服务对用户进行身份验证 - 类似于 facebook 或 google)。联合用户存储更像是您在具有遗留“角色结构”的遗留系统中拥有自己的用户,并且您基本上想通过 keycloak 管理它们(通过导入它们,或者通过某些 API 查询 - 这将是部分该文档的 11)。因此,请确定您确实需要什么。
第二,你提到以下内容:
> User is presented keycloak login screen. Onsubmission User is
> validated against external Datasource.
>
> Retrieve some attributes from external datasource, map it to
> keycloak's id and access token.
>
> Also put in a condition of user restriction of same user logging in
> multiple times at the same time.
>
> I was thinking, it could be solved by retrieving user session
> information that's available in the keycloak datasource. If i use
> external datasource, does keycloak still maintain session information?
你的意思是:从外部数据源中检索一些属性,将其映射到 keycloak 的 id 和访问令牌。?通常您只检索用户核心信息,可能还有角色和其他自定义属性(不是会话信息)。Keycloak 本身作为基于 openIDConnect 的授权服务器,将生成访问令牌,其中已经包含有关哪些受保护资源可以被谁访问的信息,因此您实际上不需要从其他地方导入任何会话,也不必担心上述令牌的生成.
关于: 还设置了同一用户同时多次登录的用户限制条件。当您第一次登录时,您到底想完成(或避免什么?)您的客户收到一个有效时间为 X 的 Bearer 令牌,在那段时间内您不需要再次登录,直到令牌过期或被删除;再次是您的 Auth 服务器负责的事情,而不是您实现的事情。您想要更具体的东西吗?
我在想,这可以通过检索 keycloak 数据源中可用的用户会话信息来解决。如果我使用外部数据源,keycloak 是否仍然维护会话信息?这听起来不对,你指的是什么会话数据?或者你需要访问?您的用户数据、范围、角色等可以通过 KEycloak Rest API ( https://www.keycloak.org/docs-api/6.0/rest-api/index.html#_overview )访问。您的外部数据源用于与用户相关的核心数据(不是外部会话),您为什么认为需要导入外部会话?
添加回答
举报