问题标签 [spring-security-kerberos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
418 浏览

spring-boot - Spring Security - 如果 Kerberos 失败,则回退到基本身份验证

如果 Kerberos 身份验证失败(例如客户端不在域中),我如何启用回退到基本身份验证?使用下面的配置,不会出现浏览器身份验证窗口,并引发以下异常:

WebSecurityConfigurerAdapter我的实施的相关部分:

0 投票
0 回答
213 浏览

spring-security - 与 Spring 5 兼容的反应式 Spring 安全 kerberos

我正在使用 Spring 5 反应堆栈编写应用程序。目前,我们正在使用 spring-security-kerberos-core 1.1 和 Spring 4 工件。想知道在 Spring 5 中连同响应式堆栈一起编写东西时,是否有任何可用于 kerberos-core 的响应式库?

0 投票
0 回答
528 浏览

spring - 从 Windows 域外访问授权服务器时如何禁用登录弹出窗口?

我正在设置一个授权服务器,它使用 Kerberos (SSO) 对 Windows 网络内的用户进行身份验证。并且,它使用基本身份验证来对网络外的用户进行身份验证。

当我尝试使用网络内的机器访问/oauth/authorize端点时,kerberos SSO 可以完美运行,而无需询问我的用户名和密码。但是,当我尝试使用网络外的机器访问同一端点时,会出现浏览器登录弹出窗口并隐藏我的自定义登录页面,直到我单击取消。

我想在访问/oauth/authorize端点时禁用登录弹出窗口。

我的配置:

0 投票
1 回答
729 浏览

kerberos - 如何在运行 Java 应用程序时修复 Keberos 身份验证提示

我编写了一个 Java 应用程序来连接 hive-metastore。它工作正常,但是当我在 Linux 上运行 jar 文件时,它要求输入 Kerberos 用户名和密码。我已经在我的代码中指定了 Kerberos 主体和 keytab 文件。而且我不想使用额外的 jass.config 文件。有没有办法解决这个问题?

这是我的源代码

预期结果- 它应该成功验证连接

实际结果——

java -jar 应用程序

Kerberos 用户名 [root]: Kerberos 密码 [root]:

我想绕过这个 kerberos 终端提示身份验证。有没有办法做到这一点?

0 投票
1 回答
1975 浏览

java - Kerberos:协商标头无效(原因 GSSException:未提供有效凭据(机制级别:未能找到任何 Kerberos 凭据))

嗬嗬!

由于来自 Kerberos 代码深处的异常,我尝试使用 Spring Security 5 和 Kerberos 通过 SSO 对用户进行身份验证失败。我将首先显示堆栈跟踪和导致它的代码,然后提供有关我的环境的其他信息,这可能有助于消除一些可能性。

堆栈跟踪

  1. 所以有一段BadCredentialsException时间我SunJaasKerberosTicketValidator正在验证 SSO 票证。这只是重新抛出一个PrivilegedActionException来自

    }

  2. PrivilegedActionException很难跟踪,因为它来自native方法java.security.AccessController.doPrivileged。我不知道实施。我觉得有趣的是PrivilegedActionException打印出来的

    PrivilegedActionException.toString方法是

    所以exception(原因异常)不为空,但它打印为null...

  3. 然而,堆栈跟踪告诉我们问题的根源GSSException来自Krb5AcceptCredential类。

    并且creds == null是因为Krb5Util.getServiceCreds(参见实现)返回null而不会导致异常。

这就是我到现在为止的距离。现在一些额外的信息。

在我的 WebSecurityConfig 中创建票证验证器

创建 KerberosServiceAuthenticationProvider

这是将抛出的对象的配置BadCredentialsException

我知道 SSO 有效

我有幸能够证明我公司的 SSO 基础设施有效。同一台服务器正在运行另一个应用程序(带有 Kerberos 的 Spring Security 4),其中用户可以通过 SSO 成功进行身份验证。所以我的设置很可能有问题。

顺便说一下,我用的是 Chrome,但我也用 IE 测试过。

如果您需要我的其他信息WebSecurityConfig或其他信息,我会提供。愿原力与你同在 :-)

其他问题

这是我迄今为止发现的,但这些示例略有不同。

0 投票
1 回答
667 浏览

java - KerberosAuthenticationProvider 与 KerberosServiceAuthenticationProvider

嗬嗬!

我在我的项目中使用带有 Kerberos 的 Spring Security 5 进行 SSO 身份验证。

WebSecurityConfig我注册两个AuthenticationProvider

如以下两个示例所示,这似乎是其完成方式:

但是我不明白为什么我需要它们。在身份验证期间KerberosServiceAuthenticationProvider,这是验证 Kerberos 票证的那个(请参阅JavaDoc

然而,这是KerberosAuthenticationProvider为了什么?在这种情况下,JavaDoc只是说

用于 kerberos 的 AuthenticationProvider。

0 投票
0 回答
1193 浏览

spring - Spnego Kerberos Spring SSO 显示 Kerberos 验证不成功

我的 WebSecurityConfiguration 类如下 -

我在属性中的基本路径是

spring.data.rest.basePath=/api

我正在尝试将控制器类作为

t-abc-def.def1.domain.net/api/msd/mydata

我的控制器类

当我点击它显示的网址时

协商标头无效:协商 YIIHuQYGKwYBBQUCoIIHr******

我的域控制器中已经设置了 keytab 文件和我的服务主体。请让我知道是否有人有任何解决方案。

0 投票
2 回答
2961 浏览

reactjs - 如何将 Windows 身份验证(浏览器)从反应应用程序传递到 Spnego Kerberos Spring SSO?

我们有一个反应应用程序,它使用从 Spring Boot Web 服务获取数据。两者都部署在同一服务器(tomcat)中。但是我们只需要对来自 React 应用程序的 web 服务调用进行 Kerberos 身份验证。任何人都可以打开 React 应用程序,但是当它导航时,它会调用 webservcie 来获取数据。因此,如果我们将 spring 配置为支持 spnego kerberos spring sso,浏览器是否有可能会自动将登录的 Windows 凭据传递(从 React 应用程序,作为在浏览器上运行的反应)到 Spring Boot Web 服务。

我们从反应应用程序调用服务如下 -

0 投票
1 回答
488 浏览

java - 用新的 WebClient API 替换 Spring KerberosRestTemplate

我正在尝试用 WebClient API 替换现有的 Spring KerberosRestTemplate。那么在新的 WebClient API 中是否为 Kerberos 提供了任何支持?

任何帮助将不胜感激,即使指向一些教程/文档也会有所帮助。

0 投票
0 回答
940 浏览

java - Kerberos POST 请求使用 Java 返回 401 错误

我正在使用 KerberosTemplate 向经过 kerberos 身份验证的 rest API 发出 POST 请求。

我可以在命令行上成功运行不安全的请求,但是当我尝试使用 HTTP 客户端进行安全调用时,它返回 401 未经授权的错误。

我尝试关闭证书检查,因为我们不使用它,并且我还尝试了没有域的用户名,但这也没有影响。

我也尝试过 kerb4j 休息模板,但我遇到了同样的问题。从代码中您还可以看到我正在检查 keytab 文件是否存在。

感谢一些帮助,谢谢。

更新了部分日志

540 [main] DEBUG org.apache.http.client.protocol.RequestAddCookies - 已选择 CookieSpec:默认 21:58:30.561 [main] DEBUG org.apache.http.client.protocol.RequestAuthCache - 未在上下文中设置身份验证缓存 21 :58:30.565 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - 连接请求:[路由:{s}->myendpoint.com:443][总存活:0;分配的路线:2 条中的 0 条;总分配:0 of 20] 21:58:30.587 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - 连接租用:[id: 0][route: {s}->myendpoint.com:443] [存活总数:0;分配的路线:2 条中的 1 条;总分配:1 of 20] 21:58:30.591 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - 打开连接 {s}->myendpoint.com:443 21:58:30.617 [main] DEBUG org .apache.http.impl.conn。

21:58:30.962 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - 执行请求 POST /1/data/loadList HTTP/1.1 21:58:30.963 [main] DEBUG org.apache.http.impl。 execchain.MainClientExec - 目标身份验证状态: UNCHALLENGED 21:58:30.968 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - 代理身份验证状态: UNCHALLENGED 21:58:30.976 [main] DEBUG org.apache.http。 headers - http-outgoing-0 >> POST /1/data/loadList HTTP/1.1 21:58:30.979 [main] DEBUG org.apache.http.headers - http-outgoing-0 >> Accept: application/json, application /+json 21:58:30.979 [main] 调试 org.apache.http.headers - http-outgoing-0 >> 客户端类型:Fred 21:58:30.980 [main] 调试 org.apache.http.headers - http-传出-0 >> 内容类型:application/json 21:58:30.981 [main] 调试 org.apache.http.headers - http-outgoing-0 >> Client-UI-Component:Jim 21:58:30.981 [main ] 调试 org.apache.http.headers - http-outgoing-0 >> 内容长度:220 21:58:30.982 [main] 调试 org.apache.http.headers - http-outgoing-0 >> 主机:myendpoint。 com 21:58:30.983 [main] DEBUG org.apache.http.headers - http-outgoing-0 >> 连接:Keep-Alive 21:58:30.983 [main] DEBUG org.apache.http.headers - http-outgoing -0 >> 用户代理:Apache-HttpClient/4.5.9 (Java/1.8.0_212-3-redhat) 21:58:30.983 [main] DEBUG org.apache.http.headers - http-outgoing-0 >>接受编码:gzip,放气 21:58:30.984 [main] DEBUG org.apache.http.wire - http-outgoing-0 >> "POST /1/data/loadList HTTP/1.1[\r][\n]" 21:58:30.984 [main] DEBUG org .apache.http.wire - http-outgoing-0 >> “接受:应用程序/json,应用程序/+json[\r][\n]" 21:58:30.984 [main] DEBUG org.apache.http.wire - http-outgoing-0 >> "客户端类型:Fred[\r][\n]" 21:58:30.985 [main] 调试 org.apache.http.wire - http-outgoing-0 >> “Content-Type: application/json[\r][\n]” 21:58:30.986 [main] 调试org.apache.http.wire - http-outgoing-0 >> "Client-UI-Component: Jim[\r][\n]" 21:58:30.986 [main] 调试 org.apache.http.wire - http -outgoing-0 >> "Content-Length: 220[\r][\n]" 21:58:30.986 [main] DEBUG org.apache.http.wire - http-outgoing-0 >> "Host: myendpoint. com[\r][\n]" 21:58:30.988 [main] 调试 org.apache.http.wire - http-outgoing-0 >> "连接:保持活动 [\r][\n]" 21 :58:30.990 [main] 调试 org.apache.http.wire - http-outgoing-0 >> "用户代理:Apache-HttpClient/4.5.9 (Java/1.8.0_212-3-redhat)[\r][\n]" 21:58:30.990 [main] DEBUG org.apache.http.wire - http-outgoing-0 >> "接受编码:gzip,deflate[\r ][\n]" 21:58:30.991 [main] DEBUG org.apache.http.wire - http-outgoing-0 >> "[\r][\n]" 21:58:30.992 [main] DEBUG org .apache.http.wire - http-outgoing-0 >> "{"firstWeekday":"0","metadata":["All"],"endDate":"2119-03-30","modifiedDate": "2019-07-20","聚合":"DAILY","symbols":["symbol1","symbol2"],"startDate":"1900-03-30"}" 21:58:31.043 [main ] 调试 org.apache.http.wire - http-outgoing-0 << "HTTP/1.1 401 [\r][\n]"接受编码:gzip,deflate[\r][\n]" 21:58:30.991 [main] DEBUG org.apache.http.wire - http-outgoing-0 >> "[\r][\n]" 21:58:30.992 [main] 调试 org.apache.http.wire - http-outgoing-0 >> "{"firstWeekday":"0","metadata":["All"],"endDate":"2119 -03-30","modifiedDate":"2019-07-20","聚合":"DAILY","symbols":["symbol1","symbol2"],"startDate":"1900-03-30 "}" 21:58:31.043 [main] 调试 org.apache.http.wire - http-outgoing-0 << "HTTP/1.1 401 [\r][\n]"接受编码:gzip,deflate[\r][\n]" 21:58:30.991 [main] DEBUG org.apache.http.wire - http-outgoing-0 >> "[\r][\n]" 21:58:30.992 [main] 调试 org.apache.http.wire - http-outgoing-0 >> "{"firstWeekday":"0","metadata":["All"],"endDate":"2119 -03-30","modifiedDate":"2019-07-20","聚合":"DAILY","symbols":["symbol1","symbol2"],"startDate":"1900-03-30 "}" 21:58:31.043 [main] 调试 org.apache.http.wire - http-outgoing-0 << "HTTP/1.1 401 [\r][\n]"> "{"firstWeekday":"0","元数据":["All"],"endDate":"2119-03-30","modifiedDate":"2019-07-20","聚合":" DAILY","symbols":["symbol1","symbol2"],"startDate":"1900-03-30"}" 21:58:31.043 [main] 调试 org.apache.http.wire - http-outgoing -0 << "HTTP/1.1 401 [\r][\n]"> "{"firstWeekday":"0","元数据":["All"],"endDate":"2119-03-30","modifiedDate":"2019-07-20","聚合":" DAILY","symbols":["symbol1","symbol2"],"startDate":"1900-03-30"}" 21:58:31.043 [main] 调试 org.apache.http.wire - http-outgoing -0 << "HTTP/1.1 401 [\r][\n]"“HTTP/1.1 401 [\r][\n]”“HTTP/1.1 401 [\r][\n]”

nosniff[\r][\n]" 21:58:31.044 [main] 调试 org.apache.http.wire - http-outgoing-0 << "X-XSS-Protection: 1; mode=block[\r][\n]" 21:58:31.044 [main] DEBUG org.apache.http.wire - http-outgoing-0 << "Cache-Control: no-cache, no-store, max -age=0, must-revalidate[\r][\n]" 21:58:31.044 [main] DEBUG org.apache.http.wire - http-outgoing-0 << "Pragma: no-cache[\r ][\n]" 21:58:31.044 [main] 调试 org.apache.http.wire - http-outgoing-0 << "Expires: 0[\r][\n]" 21:58:31.044 [main ] DEBUG org.apache.http.wire - http-outgoing-0 << "Strict-Transport-Security: max-age=31536000 ; includeSubDomains[\r][\n]" 21:58:31.044 [main] DEBUG org.apache.http.wire - http-outgoing-0 << "X-Frame-Options: DENY[\r][\n] " 21:58:31.044 [主要] 调试 org.apache.http。

1个;mode=block 21:58:31.051 [main] DEBUG org.apache.http.headers - http-outgoing-0 << Cache-Control: no-cache, no-store, max-age=0, must-revalidate 21: 58:31.051 [main] DEBUG org.apache.http.headers - http-outgoing-0 << Pragma: no-cache 21:58:31.051 [main] DEBUG org.apache.http.headers - http-outgoing-0 < < 过期:0 21:58:31.051 [main] DEBUG org.apache.http.headers - http-outgoing-0 << Strict-Transport-Security: max-age=31536000 ;includeSubDomains 21:58:31.051 [main] DEBUG org.apache.http.headers - http-outgoing-0 << X-Frame-Options: DENY 21:58:31.051 [main] DEBUG org.apache.http.headers - http -outgoing-0 << Transfer-Encoding: chunked 21:58:31.051 [main] DEBUG org.apache.http.headers - http-outgoing-0 << Date: Wed, 11 Sep 2019 20:58:31 GMT 21: 58:31.063 [主]调试 org.apache.http.impl.execchain。

21:58:31.096 [main] 调试 org.apache.http.wire - http-outgoing-0 << "0[\r][\n]" 21:58:31.097 [main] 调试 org.apache.http。电线 - http-outgoing-0 << "[\r][\n]" 21:58:31.097 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - 连接 [id: 0] [路由: { s}->myendpoint.com:443] 可以无限期地保持活动状态 21:58:31.097 [main] DEBUG org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-0: set socket timeout to 0 21:58 :31.097 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - 连接释放:[id: 0][route: {s}->myendpoint.com:443][保持活跃的总数:1;分配的路线:2 条中的 1 条;总分配:1 of 20]

进程以退出代码 0 结束