当前位置: 首页 > 知识库问答 >
问题:

当浏览器不在AD域中时,Keycloak GSS凭据委托

江承嗣
2023-03-14

Web应用程序配置为KeyCloak/OpenID连接。Keycloak领域配置为使用Windows AD Kerberos/LDAP。

用户浏览器转发到keycloak登录,成功登录后,转发回web应用程序。

Web应用程序需要使用Kerberos票证/GSS凭据连接到IBM i使用Windows AD为SSO/EIM配置IBM i。很管用。

            // Obtain accessToken in your application.
        KeycloakPrincipal<KeycloakSecurityContext> kcp = (KeycloakPrincipal<KeycloakSecurityContext>)request.getUserPrincipal();
        AccessToken at = kcp.getKeycloakSecurityContext().getToken();
        String username = at.getPreferredUsername();
        wtr.append("Windows User: ").append(username).append(newLine);

        // Retrieve kerberos credential from accessToken and deserialize it

        Map<String, Object> otherClaims = at.getOtherClaims();
        Object otherClaim = otherClaims.get(KerberosConstants.GSS_DELEGATION_CREDENTIAL);
        String serializedGSSCred = (String) otherClaim;
        GSSCredential gssCredential = KerberosSerializationUtils.deserializeCredential(serializedGSSCred);
org.keycloak.common.util.KerberosSerializationUtils$KerberosSerializationException: Null credential given as input. Did you enable kerberos credential delegation for your web browser and mapping of gss credential to access token?, Java version: 1.8.0_152, runtime version: 1.8.0_152-b16, vendor: Oracle Corporation, os: 6.2
at org.keycloak.common.util.KerberosSerializationUtils.deserializeCredential(KerberosSerializationUtils.java:70)

共有1个答案

韩博厚
2023-03-14

由于“用户不会在Windows广告域的工作站上使用浏览器”,Keycloak永远不会从浏览器接收GSS凭据,因此无法将它们转发到Java Web应用程序。

就我在Keycloak documentation Kerberos一节中所发现的而言,Keycloak(还)不支持Kerberos受限委托,因此无法模拟用户--即根据最终用户的登录名代表其生成TGT。

从我的角度来看,您的Java Web应用程序必须调用Kerberos受限委托S4U2Self进行模拟,然后使用S4U2Proxy请求一个TGS以获得预期的SPN,从而使用IBM i服务进行自动引诱。

您可以向以下示例报告以实现这一目标:

  • https://github.com/ymartin59/java-kerberos-sfudemo
  • https://github.com/tellisnz/collared-kerberos
 类似资料:
  • 我有一个问题在我的角度申请。我用的是棱角材料。当浏览器存储我的登录凭据时,我填写了登录表单,但该按钮被禁用。下面禁用按钮的图像是我的html代码: login.component.html 如果使用浏览器存储的凭据完成表单,我如何修复以使按钮启用?

  • 问题内容: 以下是我的tls后端: 密钥是使用以下两行生成的: 当我启动tls服务器并使用浏览器(https://example.com:8443)访问站点时, 在 忽略浏览器警告 后 ,我得到了预期的结果: 到目前为止,一切都很酷。 现在,当我将浏览器指向http://example.com:8443(注意使用的是http, 而不是 https)时,我得到了Firfox的以下结果(Chrome浏

  • 我有以下情况。启动Selenium测试后,将打开一个浏览器窗口。因为我有很多测试,每天都要启动很多次,所以我不会让Selenium在当前浏览器(我正在使用的浏览器)的前面打开新的浏览器窗口,而是在后台打开,这样就不会打扰我了。可能吗? 为了澄清为什么我需要这个——一天中有很多次,当我在当前浏览器中工作并且硒测试正在运行时,硒测试的浏览器窗口会突然打开,我可以突然关闭它,键入一些东西,等等。 我现在

  • MATLAB文档的所有操作是以当前目录或者搜索路径作为参考点的。你需要运行的任何文档都必须在当前目录下或者搜索目录下完成MATLAB。 一种快速查看或者改变当前路径的方法是用下面所示工具栏中的"当前目录"。 如果要搜索、查看、打开或者改变MATLAB相关目录以及文档,就要用到MATLAB“当前目录浏览器”或者,也可以用dir, cd和delete。 搜索路径 要决定怎样去执行你所调用的函数,MAT

  • 我正在开发一个Spotify应用程序,我想获得令牌。 我做错了什么? 真的有办法使用JavaScript从静态HTML文件中使用Spotify API吗?

  • 问题内容: 浏览器是否内置了超时功能,如果可以,它们是什么? 我有一个页面,该页面在最多运行5分钟的进程上执行AJAX调用。有人说浏览器在2分钟后超时,但不知道这有什么道理。 问题答案: 它取决于浏览器。“默认情况下,InternetExplorer的KeepAliveTimeout值为一分钟,其他限制因素(ServerInfoTimeout)为两分钟。这两种设置都会导致InternetExplo