1

我正在使用充当服务器并使用 GSSAPI 进行 kerberos 身份验证的应用程序。

应用程序工作
在启动应用程序时,当客户端发送协商时获取凭据
:令牌
接受上下文使用 gss_accept_sec_context
调用显示名称以获取用户名,如 MyName@DOMAIN

当前应用程序正在为每个会话执行身份验证。

带缓存的 SSO 身份验证

但是我想修改应用程序以对第一个会话执行一次身份验证并缓存某些内容以使用某些内容重新验证用户。在这里,我无法缓存用户名 (MyName@DOMAIN),因为要再次获取用户名应用程序接受上下文并调用显示名称。

有没有办法通过缓存执行 SSO 身份验证?

4

1 回答 1

1

通过现有安全上下文发送具有完整性验证的消息的能力是访问缓存的凭证建立。随着每条新消息的成功解包,可以将数据(如源原则)与使用gss_inquire_context().

如果客户端既没有请求新的上下文,也没有发送无法使用现有上下文进行打包的消息,则不会收到任何具有完整性的信息,因此服务器应该忽略客户端。(但如果底层机制和配置支持委派,服务器可以代表客户端使用缓存的凭据来执行正在进行的任务。)

组织通道和安全上下文之间的关系查找的标准不是 GSS 的一部分;它仅提供一种可选方法来验证通道匹配,以防更改与您的应用程序相关。

因此,您通常有一个独特但不安全的通道,该通道的任何一方都与其安全上下文相关联。通过让服务器将不透明的引用发送回客户端,这始终可以被模拟并且更加短暂。然后,客户端将其与每个包装的请求一起发送,以用新问题(如池中的安全边界检查)替换服务器端应用程序对映射的需求。

我不鼓励您构建解决方案来批准身份验证的时间超过系统愿意向您发出安全上下文的时间。通常,创建新的安全上下文对人类用户没有影响,除非这是系统策略的一部分,或者他们使用的底层机制缺乏类似 TGT 的机制。

于 2015-03-04T23:07:40.683 回答