问题标签 [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 回答
655 浏览

jakarta-ee - 如何在 SPNEGO 和 Kerberos 中使用容器管理的安全性?

我的网络应用程序 (JSF+JPA) 有问题。我将它部署在 Glassfish (3.1.1) 上。对于身份验证,我必须将 AD 与 Kerberos 一起使用(我的组织中不允许 LDAP 身份验证)。我为此创建了一个 SPNEGO 过滤器。然后我使用本地数据库搜索经过身份验证的用户并读取她/他的个人资料、角色等。我所做的所有安全检查主要通过在“渲染”属性中验证用户的会话 bean 来完成。

我的问题是:是否有可能(在描述的环境中)在数据表授权后立即以某种方式自动设置当前用户的(主体?)角色,以便我可以使用容器管理的安全性?

如果需要,我可以提供更多代码/配置详细信息。

0 投票
2 回答
7481 浏览

php - 如何启用 php-curl 的功能

我需要我的 CLI PHP 脚本将一些值发布到经过 SPNEGO 身份验证的站点。

但是 SPNEGO 因某种原因被禁用:

从我的 phpinfo 中提取:

与之通信的 Apache 服务器设置如下:

通过命令行尝试时它curl可以工作,但我必须输入一个虚拟密码:

如何为 php curl 启用 SPNEGO 以及如何在我的脚本中使用它?

更新

我尝试了以下方法:

我得到:HTTP ERROR 401

0 投票
1 回答
348 浏览

java - Java GSSAPI:比较两个 GSSCredential 实例

我的代码目前可以很好地为我的网站用户执行 SPNEGO (Kerberos) 身份验证。我有一个特殊的缓存机制来加速一些基于用户身份确认的决策。对于普通密码身份验证,这很简单——将“当前”用户+密码组合与“旧”组合进行比较——如果没有变化,仍然可以缓存决策。否则,他们需要重新评估。

我正在尝试为 Kerberos 做同样的事情。我已经让它大部分工作了,但我很困惑为什么GSSCredential.equals()不能工作。特别是,我在验证每个请求后获得的 GSSCredential 实例是“相同的”,因为它们是针对同一个用户、相同的服务,甚至是在相同的情况下获得的(我认为)。如果我做 atoString()并且比较输出它们是相同的(是的,我知道这无关紧要,但这仍然很好地表明它们可能应该相等)。

但是,GSSCredential_1.equals(GSSCredential_2)在请求之间总是返回 false。这可能是因为每个都是使用不同的 SPNEGO 票证获得的(根据 Kerberos,这是必要的,以避免重播场景),但这些票证仍然属于同一个主体,并且“针对”同一个服务主体。

我需要做出的代码决策最好这样表述:

这些新凭证是否代表与以前使用的相同的安全主体?到期、目的有效性和其他问题单独评估,然后再评估。

比较他们的名字“有效”,但我希望有一些更强大的东西。

有任何想法吗?

0 投票
1 回答
3633 浏览

java - 使用 sourceforge spnego 对活动目录进行 SSO 身份验证

我已经使用sourceforge spnego 项目实现了 SSO 身份验证。

这是我第一次实现任何类型的 servlet 身份验证,所以我可能会遗漏一些非常基本的身份验证或我不知道的 servlet...

我使用的SpnegoHttpFilter是与我的过滤器链顶部的库一起打包的,没有覆盖,然后我QueryFilter在过滤器链中包含我自己的过滤器,以便我可以将登录名映射到数据库 user_id。登录名称(Windows 域上的 NT 用户 ID)getRemoteUser在 HttpRequest 通过后由调用返回SpnegoHttpFilter,这一切似乎都工作正常。

我自己的过滤器QueryFilter正在做它应该做的事情,它将登录名正确映射到数据库 user_id。我在此过滤器中也有逻辑来拒绝未通过我的身份验证的请求,这也可以正常工作:当我模拟未经授权的请求时,此过滤器将其停止,并且永远不会到达 servlet。

问题是所有请求都返回 401(未经授权的 HTTP 请求状态),即使它们通过了 my 中的身份验证QueryFilter并在 servlet 上完全正常执行。

我尝试使用以下方法在我自己的过滤器中将响应明确定义为 200 (HTTP Request Status OK):myHttpResponse.setStatus(HttpServletResponse.SC_OK)但这并没有改变任何东西。

为了隔离问题,我HttpSpnegoFilter完全删除了这个问题,只是将一个硬编码的登录名(NT 用户 ID)传递给我的QueryFilter. 这工作正常,响应不再是 401(未经授权)。

这意味着打包HttpSpnegoFilter以某种方式将请求转换为Unauthorized. 当我说它实际上没问题时,它不会改变。

有谁知道如何使用这个 spnego sourceforge 项目将响应标头设置为返回 200(OK)?

我来自网络应用程序的完整过滤器链web.xml如下,如前所述,我使用HttpSpnegoFilter链顶部的包装,然后在其下方使用我自己的过滤器(这似乎正确地完成了它的工作):

我还在QueryFilter下面包含了我的完整性(尽管它似乎与我的问题没有任何关系,因为当我不使用SpnegoHttpFilter该类并仅将硬编码的 NT 用户 ID 传递给它时,它本身就可以正常工作)。倒数第二行是我明确告诉响应OK无效的地方:

}

0 投票
1 回答
334 浏览

jakarta-ee - 避免验证失败后显示空白页面

[CentOS 5.3、glassfish 3.1.1、jdk1.6.30 64bit、spnego R7]

我定义了一个 SPNEGO 过滤器来使用 Kerberos(基本模式)针对 AD 对用户进行身份验证。如果用户提供适当的凭据,则页面内容将发送给用户。但是如果认证不成功,则会向客户端返回一个带有 401 错误的空页面。我在 web.xml 中定义了一个 401 错误页面。

我的问题是:如果 SPNEGO 身份验证(==SPNEGO 过滤器)失败,如何向用户发送任何内容?我必须定义一些 SPNEGO 参数吗?或者如果之前的过滤器没有返回任何内容,我应该添加另一个过滤器来添加“登录失败”的内容吗?

0 投票
2 回答
2757 浏览

kerberos - 可选的 SPNEGO Kerberos 身份验证

是否可以进行可选的 kerberos 身份验证?

我想要的是:如果客户端(浏览器)不在域上,它将被重定向到用户名/密码 Web 登录。否则它将执行 SPNEGO 执行 Kerberos 身份验证。

如果我只是将 WWW-Authenticate: Negotiate 标头发送到非域浏览器,它就不会做任何进一步的事情。

如果浏览器不知道如何进行身份验证,是否有一些选项可以告诉浏览器尝试不同的方法?或者我必须在发送“WWW-Authenticate”标头之前确定用户是否是域的一部分?

0 投票
0 回答
1312 浏览

java - 为 Java 和 .NET 集成身份验证 [在两个地方单点登录]

我们希望实现以下登录机制,以便在托管在不同应用程序容器中的 Java 和 .NET 应用程序之间针对 AD 对用户进行身份验证。

我们的服务器设置是

  • 一台带有 Tomcat 的 linux Web 服务器 - 这是我们的 Java 应用程序所在的位置

  • 一台带有 IIS 的 Windows Web 服务器 - 这是旧版 .net 应用程序所在的位置。[身份验证可以通过 Windows 集成身份验证来完成——我们不想改变这一点——除非别无他法]

  • 一个域控制器 - win 2008

我们的目标是实现身份验证机制,任何用户都可以通过 AD [Active Directory] ​​凭据通过表单登录到我们托管在 .NET 或 Java 上的登录页面。身份验证成功完成后,用户应该浏览页面,而不会再次询问他/她的凭据。

我们需要它的原因是我们有几个 .Net 应用程序,它们设计为使用与 IIS 的集成身份验证 - 我们正在设计新的 Java 接口,我们希望通过登录表单集中身份验证,用户可以在其中再次登录 AD 并在 .NET 和身份验证在过期之前仍然有效的 Java 应用程序等。

我听说过 SPNEGO 项目,但不确定我们需要什么样的设置来实现上述场景。

如果我们不需要修改 .NET 站点设置,那就太好了,因为我们不想再维护这些应用程序了。欢迎并非常感谢所有帮助。

提前致谢,

ED

0 投票
1 回答
4917 浏览

cxf - 为 Kerberos 和模拟配置 Tomcat

我想将 Tomcat 配置为能够连接到 AD 并相应地对用户进行身份验证。

此外,我还想使用客户端凭据调用一些 Web 服务(在本例中为 Share Point)。

到目前为止,我已经成功地将 Tomcat 配置为使用 SPNEGO 身份验证,如http://tomcat.apache.org/tomcat-7.0-doc/windows-auth-howto.html上的教程中所述。请注意,我使用了 Tomcat 的 SPNEGO 身份验证(不是 Source Forge 或 Waffle)。

我没有使用 Source Forge 的实现,因为我想保持简单并使用开箱即用的 Tomcat。此外,我希望所有的身份验证和授权都由 Tomcat 处理,使用 SPNEGO 作为身份验证方法,WEB.XML并使用 Tomcat 的 JNDI 领域进行授权。

我也没有使用过 WAFFLE,因为这只是 Windows。

我使用 CXF 作为我的 Web 服务堆栈。根据http://cxf.apache.org/docs/client-http-transport-including-ssl-support.html#ClientHTTPTransport%28includeSSLsupport%29-SpnegoAuthentication%28Kerberos%29上的 CXF 文档,您需要做的就是使用 Web 服务(在我的情况下为 Share Point)进行身份验证将使用:

并在 jaas.conf 中配置 CXFClient (在我的例子中,Tomcat 的服务器 JAAS 配置所在的位置,这样我jass.conf看起来像:

然而,当我调用 Web 服务时,它是在服务用户名(即在 AD 和 in 中配置的 Tomcat 的用户名)下调用的tomcatsrv.keytab,而不是客户端的用户名(例如 duncan.attard)。

所以我的问题是:是否有某种方式可以将客户端的用户名委托(或使用某种模拟)给 CXF,这样当我调用 Share Point 的 Web 服务时(例如,我想使用 Copy.asmx 上传文件) , 文件上传为duncan.attard而不是tomcat.srv.

谢谢大家,非常感谢您的帮助。

0 投票
1 回答
8415 浏览

java - 为 Web 应用程序单点登录选择 Kerberos (SPNEGO) Java 库

我目前正致力于在我们的 Java Web 应用程序中实现企业身份验证机制,包括单点登录。Windows 网络是我们的主要目标,而 Kerberos 听起来是一个合理的选择。旁注:据我了解,Web(HTTP)环境中使用的 SSO 协议是 SPNEGO,它基本上是 Kerberos 的包装器。因此,听起来 Kerberos HTTP SSO 库实际上正在使用 SPNEGO——如果我错了,请纠正我。

当我开始研究这个话题时,我意识到没有明显的选择。让我列出这些:

  1. Spring 安全 Kerberos/SPNEGO 扩展。这是我第一次看到(因为我们已经在使用 Spring 安全性),但几年前它似乎停留在 v1.0.0 的第二个里程碑。只有这个SO question略微希望它可以用于生产。
  2. WAFFLE - Windows 身份验证功能框架。似乎很活跃,功能丰富。它可以“插入”为通用 servlet,也可以作为Spring 安全过滤器
  3. SPNEGO SourceForge。看起来很轻量级,提供HTTP Servlet过滤器,教程很容易上手。

选择一个选项而不是另一个选项有什么特别的理由吗?周围还有其他选择吗?

0 投票
1 回答
9149 浏览

java - SPNEGO:未在 GSS-API 级别指定故障(机制级别:校验和失败)

我正在尝试使用 SPNEGO + JBoss 7 + Windows 2008 R2 + JDK 7,但我遇到了这个异常:

我创建了密钥表:

任何想法为什么我会收到此错误以及如何解决它?