相关疑难解决方法(0)

Keycloak使用自定义协议映射器从数据库/外部源添加额外声明

我已经看到这两个帖子给出了这个问题的解决方案,但是他们没有提供关于如何为像我这样的非Java开发人员这样做的详细信息:

Keycloak从数据库/外部源添加额外声明

如何在Keycloak中注册自定义ProtocolMapper?

以下是他们的解决方案的概述,如果有更多细节,可以帮助其他人.

从第一个链接预期的过程

  1. 用户登录
  2. 调用我的自定义协议映射器,其中我覆盖transformAccessToken方法
  3. 在这里,我将协议映射器所在的客户端登录到keycloak中作为服务.这里不要忘记使用另一个客户端ID而不是您正在构建协议映射器的客户端ID,否则您将输入无限递归.
  4. 我将访问令牌放入协议映射器中,然后调用应用程序的其余端点来获取额外的声明,这是有保证的.
  5. 获取端点返回的信息并将其添加为额外声明

从第二个链接实现它的步骤

实现ProtocolMapper接口并添加包含对类的引用的文件 "META-INF/services/org.keycloak.protocol.ProtocolMapper".

此时Keycloak认识到新的实现.您应该能够通过管理控制台进行配置.

要向令牌添加一些数据,请添加以下接口

org.keycloak.protocol.oidc.mappers.OIDCAccessTokenMapper

并根据接口实现方法

然后使用以下内容添加文件" META-INF/jboss-deployment-structure.xml "

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.keycloak.keycloak-services"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)

完成所有这些后,每次对URL http://:/ auth/realms/testrealm/protocol/openid-connect/token的请求都会调用自定义transformAccessToken()方法

看完之后我有几个问题:

  1. 你如何"实现ProtocolMapper"
  2. 你在哪里添加前面提到的文件?(在我的Keycloak安装文件夹中看不到任何META-INF /目录)
  3. 您如何以及在何处"添加以下界面"
  4. 自定义transformAccessToken()是什么样的

谢谢大家的时间.如果我错过总结他们的答案,请告诉我.

编辑:

我开始获得赏金,希望有人能够在Keycloak 3.4.3中为我提供有关如何在数据库中添加额外声明的详细步骤(对于非Java开发人员来说足够详细)

编辑2 这里描述的方法可以做到这一点,但缺乏细节. Keycloak创建自定义身份提供者映射器

java customization keycloak

9
推荐指数
1
解决办法
1979
查看次数

如何在Keycloak中创建脚本映射器?

我需要在Keycloak中创建脚本映射器类型的协议映射器。该脚本应获取用户属性,检查其大小,并将其放在令牌上。我没有找到有关如何创建脚本的文档或示例。从我可以收集的点点滴滴中,我想我的脚本需要看起来像:

var value = user.getAttribute("myAttribute");
if (value.length > LIMIT) {
    value = value.substring(0,LIMIT);
}
token.setOtherClaims("myAttribute",value);
Run Code Online (Sandbox Code Playgroud)
  • 这是正确的吗?我组成了user.getAttribute(“ myAttribute”)。有文档来源可以找到如何获取Keycloak用户属性吗?
  • 脚本需要返回什么吗?任何帮助都将受到欢迎。

java keycloak

6
推荐指数
2
解决办法
4182
查看次数

标签 统计

java ×2

keycloak ×2

customization ×1