问题标签 [spnego]

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 投票
1 回答
12887 浏览

spring - Windows 环境中的 Spring Security 单点登录

我有一种跌入技术黑洞的感觉。有很多问题,但没有多少(最近的)答案。

简短的摘要:

我有一个使用域控制器和 Active Directory 实现(即将使用 Quest 的身份验证服务)运行的 Windows 环境。我有一系列基于 Spring 的 Web 应用程序,我想部署到这个环境中,我们需要它们使用域凭据通过单点登录无缝运行。

看起来答案是这样的:

http://blog.springsource.org/2009/09/28/spring-security-kerberos/

一些本地 AD 管理员告知我,ktpass 是一个不安全的(存储在纯文本文件中的主体和密钥)和过时的解决方案。鉴于上面链接的博客已有 3 年历史,因此很难争论。

然后我遇到了这个:

http://forum.springsource.org/showthread.php?134465-JDK-7-0-and-Spnego-Extension-don-t-work

大约一周前发布,看起来最近集成 SPNEGO 扩展的努力表明它与 JDK 7 不兼容并且不再受支持!

这似乎是人们想要做的一件常见的事情。令我惊讶的是,对于像 Spring 这样广泛使用的框架,没有一种简单的方法可以实现这一点。我在文档中没有找到另一种方法吗?

感谢您的任何见解或建议。

0 投票
1 回答
3140 浏览

active-directory - jboss-negotiation-toolkit 'secured' 测试不起作用(SPNEGO 身份验证失败)

几天前我在 JBoss PicketBox 论坛上发布了同样的问题,但还没有收到任何回复(https://community.jboss.org/thread/220959)。所以我想也许我会尝试 StackOverflow 来吸引更多的受众。

我一直在努力让 jboss-negotiation-toolkit 工作几个星期,我想我已经尝试了其他人遇到的所有问题。我现在被困在无法让 servlet 的“安全”版本工作的地步。“安全域测试”和“基本协商”测试工作正常,但 JBoss 在尝试打开安全链接时继续抛出“LoginException”。我很确定这与一些 AD/Kerberos 设置有关,但我无法取得更多进展。

有没有人遇到过同样的问题,或者有没有人对问题出在哪里有任何建议?抱歉,这篇文章很长,但下面是设置的所有细节以及到目前为止我是如何配置的,试图提供尽可能多的细节。

这是我们的设置:

  • Windows 2008 广告 (QAAD)
    • DNS 名称:qaad.dev.company.com
    • 域名:质量(QUALITY.COMPANY.COM)
  • CentOS 6.2 运行 JBoss AS 7.1.1.Final (BARDEV1)
    • 部署:jboss-negotiation-toolkit-2.2.2.Final
    • DNS 名称:bardev1.dev.company.com
  • 测试客户端是加入 QUALITY 域的 WinXP 和 Win7

BARDEV1 当前已加入质量域(这是必要的还是应该在未加入域的情况下工作?)。

JBoss SPNEGO 配置是:

/etc/krb5.conf设置为:

QAAD 盒子有“bardev1”的“计算机”帐户。此帐户的委派设置为“信任此计算机以委派任何服务(仅限 Kerberos)”。keytab 是在 QAAD 盒子上生成的,SPN 是使用以下命令设置的:

  • setspn -S HTTP/bardev1.dev.company.com@QUALITY.COMPANY.COM bardev1
  • ktpass /out bardev1_qaad_rc4.keytab /princ HTTP/bardev1.dev.company.com@QUALITY.COMPANY.COM /mapuser quality\administrator -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL /pass * /kvno 0

    • (注意:必须设置 /kvno 0 否则我得到:KrbException: Specified version of key is not available (44))
  • setspn -L bardev1

    • 输出:CN=bardev1,CN=Computers,DC=quality,DC=company,DC=com 的注册 ServicePrincipalNames:HTTP/bardev1.dev.company.com@QUALITY.COMPANY.COM HOST/bardev1.dev.company.com HOST /BARDEV1
  • setspn -L 管理员
    • 输出:CN=Administrator、CN=Users、DC=quality、DC=company、DC=com 的注册 ServicePrincipalNames:HTTP/bardev1.dev.company.com

使用“管理员”帐户进行初始测试,因此我不必处理新的用户帐户。该帐户已将委派设置为“信任此计算机以委派任何服务(仅限 Kerberos)”,并且没有设置其他帐户选项,例如“使用 kerberos DES 加密...”、“帐户支持 AES 128/256...”或'不需要 kerberos preauth'。他们中的任何一个都需要吗?

在客户端机器上,为了让浏览器使用登录用户的凭据,我必须将 URL 设置为:

  • http://bardev1:8080/jboss-negotiation-toolkit-2.2.2.Final

如果我把它说成:

  • http://bardev1.dev.company.com:8080/jboss-negotiation-toolkit-2.2.2.Final

然后我会弹出用户名和密码。

我确实尝试使用'HTTP/bardev1@QUALITY.COMPANY.COM' 运行setspn 和ktpass,结果相同,即基本和域测试有效,但安全无效。

“SecurityDomainTest”的输出:

JBoss 日志:

浏览器:

“基本谈判”的输出:

JBoss 日志:

浏览器:

“安全”的输出:

JBoss 日志:

浏览器:

执行的其他测试/设置

我还尝试在 QAAD Windows 服务器本身上运行 jboss 实例,更新了 setspn 和 ktpass 命令,但结果相同,“安全”测试失败并出现 LoginException。

我还尝试使用不同的 AD 服务器(COLLAB,在 Windows 2003 AD 服务器上运行),但结果相同。

所以我很确定这是一些设置/配置/环境问题,但我似乎无法深入了解它。

0 投票
3 回答
34677 浏览

tomcat - Tomcat 无法使用 spnego 进行身份验证,“无法找到默认领域”

我正在使用http://spnego.sourceforge.net/spnego_tomcat.html教程来尝试配置 Tomcat 以使用 spnego。

Hello_KDC.java 工作,我能够进行身份验证。如果我使用错误的密码,我会得到错误异常,所以它正在工作。

但是当我尝试将该教程用于 Tomcat 时,它会中断。Tomcat ROOT/index.jsp 变为空白,并且在监视时我看到它返回 404。 log\host-manager.2013-02-22.log 具有以下内容:

这发生在 tomcat 启动期间,在从浏览器加载任何页面之前。当我尝试加载页面时,没有添加任何日志。

在 krb5.conf 中,我尝试了主机名和 IP 并得到相同的错误。krb5.conf 和 login.conf 正在被定位,因为如果我删除它们,我会得到这个日志:

知道会发生什么吗?

0 投票
1 回答
4713 浏览

c++ - 无法获得协商身份验证以在 libcurl 程序中工作

我目前正在libcurl(version 7.19.6 built with SPNEGO and GSS-Negotiate support)编写一个客户端(C++/C),它连接到KerberosTomcat 服务器后面的受保护网页(受保护)。使用命令行:-

这有效(服务器返回一个未经授权的 HTTP 401,然后它允许SPNEGO传递和处理令牌,我可以访问受保护的页面)。

但是,当我编写以下代码并尝试时:-

在与页面相对应的初始连接(错误 302)被临时移动后,我得到了服务器的响应。

有谁知道这怎么可能发生。

其他一些信息配置(KDC = Windows Active Directory in Windows server 2008),

curl version(7.19.6)

好的,我对wireshark进行了更多调查,发现他们的初始请求之间存在以下差异:-

对于命令行一(即成功的):-

而对于客户端代码(我编写但失败的代码):-

这意味着用户代理没有在程序中传递。我仍在研究它,一些输入将不胜感激

第二次编辑:-我对两者的详细输出进行了观察:-

对于命令行版本(工作一个) -

而对于非工作的(我写的客户端代码): -

这两行都是各自 .exe 文件输出的前几行。现在我注意到两件事。默认情况下,失败的一个会转到基本。两个(这个更令人不安),在失败的一个中用户代理和主机行中没有箭头(>)。这是否意味着永远不会发送用户代理?

0 投票
0 回答
468 浏览

jersey - 在 Jersey 客户端中设置 SPNEGO 凭证

我有一些使用 Jersey 创建的 REST 服务,它们使用 SPENGO 进行身份验证。我正在使用 Jersey 客户端创建验收测试。我想知道如何使用 Jersey 客户端来设置 SPENGO 标头。我查看了过滤器,但并不真正理解它。如果有人可以提供代码示例,将不胜感激。

0 投票
1 回答
2900 浏览

tomcat - 部署 CAS 时 spnego 身份验证停止工作

我有一个可用的 tomcat 实例,其中 tomcat-manager 小程序使用 SPNEGO 进行身份验证。当我部署 CAS - 配置为使用 SPNEGO - 时,会发生以下情况:

  • 部署后,管理器小程序和 CAS 都按预期工作
  • Tomcat重启后,它们都不起作用,它们都抛出异常(见下文)
  • 如果我取消部署 CAS,管理器小程序在 tomcat 重新启动之前仍然无法工作

我假设应用程序不应该修改其他应用程序的行为,因此使用 CAS 进行身份验证是自愿的。如果这是真的,那么这种行为将是一个错误。如果不是,那么我会假设 CAS 应该替换应用程序的身份验证,在这种情况下它仍然是一个错误。但是,我也假设我错过了一些关于 CAS/tomcat 应该如何工作的重要信息。简而言之:这是一个需要报告的错误,和/或我应该了解更多关于 CAS/tomcat 应该如何工作(以及在哪里工作?)

尝试登录管理器小程序时出现异常:

与 CAS 相同:

0 投票
0 回答
457 浏览

http - Spnego 身份验证不适用于响应代码驱动的 http 客户端

我正在尝试编写一个连接到启用 kerberos 的 tomcat 的 http 客户端(使用浏览器测试是正确的)。它首先获取响应代码(将是 401),然后继续其工作。

代码是

现在,当我评论该行时:-

并输入 if(true) 而不是 if(rescode ==401),它可以工作。

我不确定出了什么问题。getResponseCode() 在内部调用 getinputStream ,因此我使用了单独的 url 连接。即使它仍然不起作用

PS - 服务器设置完美,Authenticator 类也是正确的。

0 投票
1 回答
1174 浏览

http - Web 浏览器 (IE8) 如何确定要为 Authorization: Negotiate 请求标头发送的令牌?

我在 java 应用服务器上安装 spnego,它将针对 Active Directory 对用户进行身份验证。我已密切遵循所有指示,并且 AD Preauth 帐户在 servicePrincipalName 属性中具有 java 应用服务器 FQDN。我们已经有另一个安装了 spnego 的 Java 应用程序服务器可以正常工作(我没有安装,它们不再在这里)。

我开发了一个简单的 java EE 6 Web 应用程序来测试 spnego 是否正常工作(带有 request.getRemoteUser() 的 jsp 页面)。当我在现有服务器上运行此应用程序时,我正确地得到了我的用户名响应。当我在我正在设置的新服务器上运行它时,我收到以下错误:

使用 Fiddler 检查会话,授权:协商令牌请求到正确工作的服务器是一个巨大的字符串(我相信 Kerberos 令牌?)。对非工作服务器的授权:协商令牌请求只有 56 个字符长(所以,NTLM 令牌?)。当服务器收到该 NTLM 令牌时,我相信那是引发错误的时候。

我检查了早期协商会话的响应,但找不到服务器要求 Kerberos 与 NTLM 令牌的位置。浏览器如何确定发送什么?

其他详细信息:Java 应用服务器机器:Windows 2008 R2、Java 1.7、Glassfish 3.1.2.2

客户端机器:Windows 7 Enterprise,标准企业 Windows 域上的 IE8

谢谢。

0 投票
1 回答
722 浏览

websphere-7 - WebSphere 7:GSSCredential 已过期,必须重新登录

当我尝试发送 WS 请求(如下)时,我收到了这个奇怪的错误。我正在使用WebSphere App Server 7.0.0.23。由于我不熟悉这种低级别的 WebSphere 功能,因此将不胜感激有关此问题的任何帮助。谢谢!

0 投票
1 回答
540 浏览

kerberos - Verifying if the delegated kerberos credential is proper

I am currently trying to enable a spnego based SSO Application. As part of this I seek to get the delegated credentials.

How to verify that the credential I get after GSSContext.acceptSecContext(gss, 0, gss.length); is a delegated credential or not. GSSContext.getCredDelegState() is true.

My primary doubt is whether the server principal in the ticket should be krbtgt/ABC.XYZ.COM@ABC.XYZ.COM or should be the service (HTTP/host.ABC.XYZ.com) for which the ticket was delegated?``

I am using a linux based KDC and linux hosts for this.

Is there any reference to what the delegated ticket should be like?