问题标签 [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.
hadoop - Hadoop 安全
我正在尝试学习“如何在 Hadoop 中实现 Kerberos?” 我浏览了这个文档 https://issues.apache.org/jira/browse/HADOOP-4487 我也浏览了基本的 Kerberos 东西(https://www.youtube.com/watch?v=KD2Q-2ToloE)
从这些资源中学习后,我得出了一个我通过图表表示的结论。场景: - 用户登录到他的计算机通过 Kerberos 身份验证并提交地图缩减作业(请阅读图表的描述,它几乎不需要 5 分钟的时间)我想解释图表并提出与少数相关的问题步骤(粗体) 黄色背景的数字代表整个流程(数字 1 到 19) DT(红色背景)代表委托令牌 BAT(绿色背景)代表块访问令牌 JT(棕色背景)代表作业令牌
步骤 1、2、3 和 4 表示:- 请求 TGT(授予票证)请求名称节点的服务票证。 Question1) KDC应该在哪里?它可以在我的名称节点或作业跟踪器所在的机器上吗?
步骤 5、6、7、8 和 9 代表:- 向名称节点显示服务票证,获得确认。名称节点将发出委托令牌(红色)用户将告知令牌更新者(在这种情况下是 Job Tracker)
问题 2) 用户将此委托令牌连同作业一起提交给 Job Tracker。委托令牌会与任务跟踪器共享吗?
步骤 10、11、12、13 和 14 代表:- 请求 Job tracker 的服务票证,从 KDC 获取服务票证 将此票证显示给 Job Tracker 并从 JobTracker 获得 ACK 提交 Job + Delegation Token 到 JobTracker。
步骤 15,16 和 17 表示:- 生成块访问令牌并传播到所有数据节点。将 blockID 和 Block Access Token 发送到 Job Tracker,Job Tracker 会将其传递给 TaskTracker
问题 3) 谁会向 Name Node 索要 BlockAccessToken 和 Block ID?JobTracker 或 TaskTracker
抱歉,我不小心错过了 18 号。Step19 表示:- Job Tracker 生成 Job Token(棕色)并将其传递给 TaskTrackers。
问题 4)我是否可以得出结论,每个用户将有一个委托令牌,它将分布在整个集群中,并且每个作业将有一个作业令牌?所以一个用户将只有一个Delegation Token和许多Job Tokens(等于他提交的作业数量)。
请告诉我我是否遗漏了什么,或者我在解释中的某个地方有错误。
sql-server - IIS + Kerberos + SQL Server + EF Initial connection failure
I have a web server on my domain that I'm trying to use Kerberos delegation to allow access to my SQL Server. They are all Server 2008 R2 servers with IIS 7.5 and SQL 2008 R2 (the DC is also Server 2008 R2).
Everything is working, in that I see transactions being executed on my SQL Server under the user's account. However, the first time I access the site after an extended period of time (30 mins or so) I get the following error thrown by my EF DataContext
object:
The error page takes ~20 to 30 seconds to be served. After receiving this error, if I hit refresh in my browser, I get the page with all of the data almost instantly (around 200ms)
What would be causing this initial connection to fail, but all subsequent connections to succeed?
Misc information:
- EF 6.0
- IIS 7.5, Windows Auth & APS.NET Impersonation enabled, Extended Protection Off, Kernal-mode auth Off, Providers - Negotiate:Kerberos
- AppPool uses service account (all SPNs are registered to that account)
If there is any more information that you need, let me know and I'll update this list!
UPDATE:
After doing several network traces, I'm seeing the following pattern:
- HTTP Request 1
- 6 frames of KerberosV5 traffic
- HTTP Response: No SQL Data
- HTTP Request 2
- 2 frames of KerberosV5 traffic
- TDS Prelogin
- TDS Response
- 2 more frames KerberosV5 traffic (TGS MSSQLSvc request and response)
- 6 frames of TDS Traffic (SQL Data)
- HTTP Response: Success!!
I'm thinking this is a kerberos issue...
authentication - java安全异常:校验和失败
我 在 java 中使用http://webmoli.com/2009/08/29/single-sign-on-in-java-platform/进行 SSO。
我有 KDC Windows server 2008,因为我使用 setspn 命令为 testso 用户创建了 spn。并在 jaas.con 中使用 testsso@MYDOMAIN.COM 作为主体。
我在 Windows 7 机器(在 AD 内)中有 Tomcat 服务器。在此,我创建了一个 jsp 的 servlet(来自 webmoli 本身)。
我从第三台机器 Windows XP(在 AD 内)发送该 servlet 的浏览器请求。
但我得到校验和失败错误。Stacktrace 如下:
请帮我...
c++ - 使用 Kerberos 身份验证模拟用户时建立 ODBC 连接
我的客户端应用程序/浏览器使用 Kerberos 对我的服务器进行身份验证。服务器运行 Apache/Tomcat,它与我在服务器上运行的服务通信。我的服务可以将工作分配给另一台机器上的另一个服务,因此我们需要设置约束委派。我在服务器上的服务(在服务器机器或另一台机器上)需要使用 ODBC 与 SQL Server 数据库通信。我想冒充最终用户(在 AD 中)。从在线阅读到模拟最终用户,似乎我需要做的就是在模拟最终用户的线程上对 ODBC 驱动程序进行 SQLDriverConnect 调用。
如果用户已经通过身份验证并且我可以在我的服务中获得一些令牌(TGT?),我需要在我的服务线程中调用什么 API 来模拟最终用户?我认为 ImpersonateLoggedOnUser 和 ImpersonateSecurityContext 是可能的选项,但我真的不知道哪些适用于我的情况,以及我在这里需要什么具体的票证/令牌。
另外,我看到当用户已经通过身份验证时,SetThreadToken 也可以是一个选项。是吗?
我的服务是 C++,环境是 Windows(7 或 Server)。
google-app-engine - 应用引擎 + java + keberos Token
我开发了一个谷歌应用引擎应用程序,它支持使用 JAAS 的集成 Windows 身份验证。
为了在 Mozilla firefox 上启用集成身份验证,我进行了以下配置
我的应用程序不支持 ntlm,因此没有进行任何相关配置。
在本地一切正常。我的意思是浏览器能够获取 kerberos 服务令牌并将其发送到我的应用程序。
但是当我部署在谷歌应用引擎中时。然后浏览器无法发送 kerberos 令牌。我总是得到 NTLM 令牌。
以下是流程 1. 我从本地网络的 mozilla 浏览器中点击了受信任的 url。2. 我的应用程序使用 401 Negotiate challenge 向浏览器挑战服务令牌 3. 浏览器尝试获取服务令牌。4. 我观察到它发送 NTLM 令牌。
我想知道为什么浏览器将 NTLM 令牌发送到应用引擎,我应该如何处理这种情况?
c - 使用 krb5 库的 Kerberos 约束委派失败并显示错误消息 GSS_S_BAD_MECH
我正在尝试使用 krb5 库在 Unix 系统上实现 Kerberos 约束委派。这个概念是“受信任的”用户将能够代表系统中的另一个用户获得 kerberos 票证。我将此代码用作实现的基础:http: //fossies.org/dox/krb5-1.11.5/t__s4u_8c_source.html
目前,我能够代表受信任的用户生成票证;票据似乎已被交换服务器接受,但最后一步是服务器发送回一个挑战,如此处所述,不幸的是,这对我来说失败了: https ://www.rfc-editor.org/rfc/rfc4559 (例如见第 5 章)
我从服务器收到“协商”标签,我需要对其进行解码:
“客户端将解码 gssapi-data,将其传递到 Gss_Init_security_context,并将新的 gssapi-data 返回到服务器。”
为了做到这一点,我在“Negotiate”字符串之后解码(base64)数据并将其转换为这个结构:
};
这是我对这些数据所做的事情:
这失败并显示错误消息:GSS_S_BAD_MECH...
这似乎表明 mech_data 是错误的,但我真的不明白为什么。知道可能出了什么问题吗?我是否正确假设我需要从服务器解码令牌,将其转换为 gss_api 结构,然后用这个调用 gss_init_sec_context?
非常感谢您的帮助。如果有不清楚的地方,请询问,我会尽力提供更多细节
winapi - 在 Windows 上使用 GSSAPI 已建立的安全上下文模拟线程
我正在努力在我的应用程序中启用 Kerberos 身份验证/委托。
我的设置:客户端是任何网络浏览器。该服务器在 Windows 上运行并托管我的一些服务,其中 Apache/Tomcat 作为前端。服务器可以将工作委派给我在一台或多台机器上的一项或多项服务。我的服务在 Java 中运行,但通过 JNI 调用 C++ 代码,并且 C++ 代码连接到数据源(对于大多数关系数据源,通过 ODBC)。目前我正在通过其 ODBC 驱动程序连接到 SQL Server。
我在 Apache 中设置了 mod_auth_kerb,它能够使用 Kerberos 对用户进行身份验证。我的问题:如何使用已建立的安全上下文来模拟将调用 ODBC 驱动程序的 SQLDriverConnect 调用的线程?我有一个工作原型,它使用 LogonUser 和 ImpersonateLoggedonUser API 登录特定用户(使用她的用户名和密码)并在调用 SQL Server ODBC 驱动程序上的 SQLDriverConnect 调用的线程上模拟她。但我不知道如何使用 GSSAPI 建立的安全上下文/委托上下文 (gss_ctx_id_t/gss_cred_id_t) 来模拟我的线程。换句话说,如何将 GSSAPI 的句柄转换为 SSPI 句柄,以便我可以调用 ImpersonateSecurityContext 或 ImpersonateLoggedonUser 或类似的 Win32 API。
任何帮助,将不胜感激。谢谢!埃德
apache - 在 Web 服务器中作为远程用户 ID 运行命令
我有一个在 Tomcat7 和 apache Httpd 服务器上运行的 Web 应用程序。我有一个用例以远程或客户端用户身份在其用户帐户与远程用户帐户不同的 Web 服务器上运行命令。目前,我通过以 root 用户身份运行 Web 服务器并允许 root 用户以远程用户身份 sudo 以在服务器端执行命令来满足此要求。
如果您有更好、更安全的方法来处理这个问题,请告诉我。
谢谢。
jdbc - jdbc 中的 kerberos 身份验证和连接池
我已经通过 SPNEGO/Kerberos 在带有 SSO 的 Tomcat 上运行 Java Web 应用程序,并且我想将 kerberos 票证传递给数据库,在我的情况下是 Oracle DB(就像 MS 产品中的模拟)。我找到了一个实现示例(http://docs.oracle.com/cd/B28359_01/java.111/b31224/clntsec.htm):
但是众所周知,创建新连接是一项昂贵的操作。为了解决这个问题,常用连接池(如c3p0),但我找不到例子,如何将上面的代码和连接池结合起来。有什么例子吗?
hadoop - 客户端无法通过以下方式进行身份验证:[TOKEN, KERBEROS]
我正在使用 YarnClient 以编程方式开始工作。我正在运行的集群已经过 kerberos 化。
通过“yarn jar examples.jar wordcount ...”提交的法线贴图减少作业工作。
我试图以编程方式提交的工作没有。我收到此错误:
2004 年 9 月 14 日 21:14:29 错误 client.ClientService:应用程序提交期间发生错误:应用程序 application_1409863263326_0002 失败 2 次,原因是 appattempt_1409863263326_0002_000002 的 AM 容器退出,退出代码:-1000,原因是:本地异常失败:java.io。 IOException:org.apache.hadoop.security.AccessControlException:客户端无法通过:[TOKEN,KERBEROS] 进行身份验证;主机详情:本地主机为:“yarn-c1-n1.clouddev.snaplogic.com/10.184.28.108”;目标主机是:“yarn-c1-cdh.clouddev.snaplogic.com”:8020;.这次尝试失败..申请失败。14/09/04 21:14:29 ERROR client.YClient: 应用程序提交失败
代码看起来像这样:
我原以为可能会添加一些东西来达到以下效果:
也许可以减轻我的痛苦,但这似乎也无济于事。任何帮助将不胜感激。