问题标签 [kerberos-delegation]
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.
java - 浏览器不在 AD 域中时的 Keycloak GSS 凭据委托
我有一个使用 Keycloak/OpenID Connect 向 Windows AD 验证用户身份的 Web 应用程序。
用户不会在 Windows AD 域中的工作站上使用浏览器。
Web App 服务器(带有 Keycloak 适配器的 Tomcat)正在 Windows AD 域中运行。
为 Keycloak/OpenID Connect 配置了 Web 应用程序。Keycloak 领域配置为使用 Windows AD Kerberos/LDAP。
用户浏览器转发到 keycloak 登录并在成功登录后转发回 Web 应用程序。
Web 应用程序需要使用 Kerberos 票证/GSS 凭证连接到 IBM i IBM i 使用 Windows AD 配置为 SSO/EIM。有用。
我为 GSS 凭据转发配置了 Keycloak 客户端。
我尝试使用 Keycloak 客户端从 Servlet 请求中获取 GSS 凭据
“otherClaims”映射为空。所以反序列化会抛出一个带有消息的空指针异常
我错过了什么?
asp.net - 没有 Kerberos 委派的同一域中的服务之间的 Windows 身份验证
我们有两个 Intranet 应用程序都托管在同一个域上,都托管在 IIS 上,都使用 Windows 身份验证,但托管在不同的 windows 2008 服务器上。
我的目标是让 ASP.net Web 应用程序 A 调用服务 B。我还希望 A 将登录用户的身份验证信息传递给 B。
一件事,我想避免 Kerberos 委托,因为设置它的麻烦和安全问题。
你能推荐我实现目标的方法吗?
python - Python kerberos 双跳
我正在创建一个在 pyhon 子进程中调用应用程序的 Windows Web 服务 (REST)。我想使用调用者的凭据执行该应用程序,即在该服务中使用 kerberos 实现模拟。阅读了很多文章但没有发现任何有用的东西,您能否告知它是否可能以及如何实现?
谢谢
kerberos - Cyrus SASL 和 Kerberos TGT
使用 Kerberos,使用 kinit 成功进行身份验证会生成一个本地缓存的 TGT,该 TGT 将用于对 Kerberized 服务进行身份验证。通常,此 TGT 有效期为一天,因此用户每天只需提供一次凭据即可与 Kerberized 服务进行所有交互。
假设我编写了一个客户端/服务器应用程序,该应用程序使用 Cyrus SASL 实现来使用 Kerberos 机制对用户进行身份验证。TGT 缓存在这种情况下如何工作?换句话说,客户端 cyrus 库是否会自动跟踪 TGT,以便将来与服务器的交互不需要用户凭据?如果是这样,有没有办法指定 Cyrus 从 KDC 获得的 TGT 是可转发的,以便客户端可以与其他 Kerberized 服务交互?
感谢您的任何提示!
.net - .NET 客户端库是否可以配置为使用 CNAME 进行 Kerberos 身份验证?
Windows 客户端(在本例中为浏览器)配置为在构建 Kerberos 票证请求以发送到 KDC 时忽略 DNS CNAME 记录。如果您有 CNAME,它还将解析 CNAME 指向的 A 记录,并在构建请求时使用 A 记录的 FQDN。这可以被覆盖:
- IE(https://support.microsoft.com/en-us/help/938305/error-message-when-you-try-to-log-on-to-a-web-site-that-requires-kerbe)
- 铬(https://www.chromium.org/administrators/policy-list-3#DisableAuthNegotiateCnameLookup)。
我的场景类似,但涉及客户端浏览器和后端之间的中间层。客户端使用 Kerberos 向前端进行身份验证,这很好,前端使用 Kerberos 约束委派将客户端的凭据委托给后端,这也很好。
我们最近发现此配置存在问题。我们的一些后端服务位于 AWS ELB 之后,而后者又在它们前面有 CNAME,因此可以重新部署它们。
所以现在的问题是:在委派客户端凭据时,是否可以更改前端服务器的 Kerberos 客户端的行为以使用后端 ELB 的 CNAME 来形成 Kerberos 请求,就像您可以在浏览器上做的那样?
一些限定词:
- 中间层用 ASP.NET 编写并在 IIS 上运行。
- 我们无法将 DNS 区域中的 A 记录配置为指向后端 ELB,因为它们使用 AWS SDN 功能来配置多个 IP,这些 IP 可能会发生变化。
kerberos - 应如何部署 kerberos 委派
以下是我对 Kerberos 委托的理解:
1]无限制委托(W2000):Windows 2000 允许授权用户转发 TGT:他请求可转发的 TGT(身份验证服务),然后可以请求转发的 TGT(票证授予服务)。他可能只是将此 TGT(带有会话密钥)转发给服务(krb_cred 消息)。然后,该服务可以代表用户为任何服务请求票证服务,并且反过来也可以将带有用户会话密钥的 TGT 转发到任何其他服务[代理/代理票证超出范围,因为它似乎没有被使用,因为它需要的先决条件],
2]受限委托(自 W2003 起):IT 管理员可以在 AD (SPN) 中配置服务,以授权代表用户为一组服务 (SPN) 请求票证服务:“Allowed-To-Delegate -To" (A2D2) 参数。此外,新的扩展 (S4U2Proxy) 允许服务代表用户为其他服务请求票证服务,因为它能够代表用户为自己提供有效且可转发的票证(因此,这意味着存在不再需要从用户那里获取 TGT 及其关联的会话密钥)。要为自己获得可转发的票证,该服务应标记为“Trusted-To-Authenticate-For-Delegation”(T2A4D),
3]协议转换(S4U2self)(自 W2003 起):服务可以代表用户向 KDC 请求票证服务(为自己),而无需向 KDC 显示任何表明用户已通过 Kerberos 身份验证的证据。这可以通过在 AD 中的 SPN 配置中启用标志“使用任何协议”来完成。然后,如果为此服务设置了正确的标志(T2A4D 和 A2D2),它可以使用约束委派,
4]受约束的跨域委托(自 W2012 起):
¤ 以前无法使用跨域委托(因为无法在 SPN 的当前域之外设置 SPN),现在可以在目标服务而不是源服务上配置授权(从概念上讲,它更多逻辑)。
¤ 可以在目标服务上配置一个特定的 SID ($$),以在用户没有被 KDC 明确认证时授权或不授权委托(这意味着当服务使用其协议转换能力为自己获取票证时):为了使它起作用,这意味着(我猜)授予目标服务的源服务的票务服务包含此信息,
我不清楚的是:
1)阅读MS文章后,我了解到尽管TGT中有明显的“转发”标志,但转发的TGT不能用于进行约束委托。事实上,这与使用自己的 TGT 和自己的票证服务的服务完全不同,因为使用用户的 TGT,服务被认证为请求服务票证的用户。使用票证请求的“地址字段”是否有任何意义,它旨在包含请求者的 iP/DNS 地址(这当然可以修改)?当使用转发的 TGT 时,是否有任何参数可以拒绝票证请求?为什么不使用地址字段(客户端)来检查相关权限?是因为它不可靠(地址可能被欺骗)还是因为它不够精确而无法识别 SPN?
2) 引入 SID ($$) 对我来说意味着可转发的服务票证确实包含特定信息,表明该票证是通过 S42Uself 扩展获得或由用户直接获得的。但是不知道是什么
3)如果转发的 TGT 意味着不能限制委派,它似乎被“弃用”。因此,当我使用 klist(企业环境中的 Windows 10 机器,这适用于两个不同的公司)显示我的缓存票证时,我不明白为什么会有一个可转发的和一个转发的 TGT(因此用于委派)。是标准和推荐的做法还是我错过了什么?
非常感谢您的反馈!!祝你有美好的一天。
蛛形纲。
java - Krb5LoginModule 中“isInitiator”标志的用途是什么?
我正在研究 Kerberos 委托,我希望根据传入的票证模拟用户,并连接到第三方系统。
我的观察是,仅当Krb5LoginModule 设置中的标志设置为context.getCredDelegState()
true 时才返回true。isInitiator
我的困惑是,我的服务器端代码(代表用户建立连接)是Acceptor而不是Initiator,所以我将标志设置为 false 不是很明显吗?但是我无法委派凭据。
如果有人能提供一个很好的解释,那将非常有帮助。
更新:我发现当您在 AD 中为服务用户设置委托时(例如 - “信任此用户以委托任何服务”) - 然后客户端(从浏览器访问服务的用户)必须注销并重新登录。然后接收委托凭证。在这种情况下,“isInitiator”设置为 true。
c# - Kerberos 模拟级别“模拟”而不是“委托”
情况
我有一个 .NET Core CLI 2.2。或 3.0 preview5 客户端,将 REST 请求发送到服务器,使用 Kerberos 进行保护。模拟级别应该是“委托”,但只能实现“模拟”。
问题
我无法使用2.1 及更高版本的 .net 核心客户端实现委派级别。它适用于2.0。
java - Kerberos 委派:GSSUtil.createSubject 仅返回主体名称的主题
我正在做 kerberos 委托。我注意到它GSSUtil.createSubject(context.getSrcName(), clientCred)
返回一个没有凭据的主题。在此之前,我已经完成GSSCredential clientCred = context.getDelegCred();
了返回凭据的操作。编辑:当我从同一域中的一台机器访问我的服务时,它可以工作,而如果从同一域中的其他机器访问,它不会。对 AD 需要哪些额外设置感到困惑?非常感谢任何帮助。
以下是我的代码:
docker - NTLM Kerberos 支持在 nginx 服务器后面设置的身份服务器(不适用于 IE)
我有身份服务器 4,它位于 ngnix 代理后面。它支持 Azure AD。现在,如果我在 https 上进行 SSO,那么它不适用于 IE 浏览器,但由于 IWA/NTLM/Kerberos 而在其他浏览器中正常工作。
因此,需要在 ngnix 中进行更改以支持这一点。