5

Web 应用程序(通过浏览器使用)的单点登录 (SSO) 已详细记录并建立。为富客户端建立 SSO 比较困难,通常建议基于 Kerberos 票证,特别是使用 Windows 登录到域中的 ActiveDirectory。

但是,我正在为以下问题寻找更通用的解决方案:我需要建立“真实”SSO(所有应用程序的一个身份,即不仅仅是跨应用程序的密码同步),在客户端(非托管计算机,包括非 Windows),“终端客户端”是 Java 应用程序和 GTK+ 应用程序。两者都使用基于 HTTP 的协议(例如,基于 HTTPS 的 WebServices)与其服务器对应方通信。客户端和服务器不一定位于同一个 LAN/Intranet,但客户端可以从 Extranet 访问服务器。所有应用程序的服务器端位于同一个网络区域,SSO 组件可以通过 LDAP 访问身份提供者。

我的问题基本上是“我该怎么做”?进一步来说,

a) 对于安全、受保护的客户端“sso 会话存储”是否存在商定的机制,就像浏览器访问应用程序的 SSO cookie 一样?可能是模拟 Kerberos (TGT?) 甚至直接重用它,即使在客户端没有执行 ActiveDirectory 身份验证?

b) 是否有任何协议/API/框架用于富客户端和 SSO 的其他参与者之间的通信(就像 cookie 一样)?

c) 是否有任何 API/框架可用于通过网络推送类似 kerberos 的 TGT 和会话票证?

d) 是否有演示如何执行富客户端 SSO 的示例实现/教程?

我知道有“填写”代理学习将凭据输入到客户端的应用程序对话中。如果可能的话,我宁愿不使用这样的“帮手”。

另外,如果可能的话,我想尽可能使用 CAS、Shibboleth 和其他开源组件。

感谢您的意见、建议和回答!

米库

4

2 回答 2

1

使用 AD 帐户是通用解决方案。Kerberos 无处不在。这是唯一会在登录时要求您提供一次且仅一次的凭据的机制。

这都是可行的,你需要:

  1. 一个KDC
  2. 正确的 DNS 条目
  3. KDC 帐户
  4. 正确的 SPN 条目
  5. 配置为与 KDC 对话的客户端计算机
  6. 使用 JAAS 和 JGSS 获取服务票证的 Java 应用
  7. GSS-API 与您的 GTK+ 应用程序一起获取服务票证

你自己发现了什么?

于 2012-08-18T22:26:08.890 回答
0

同意 Michael 的观点,即 GSSAPI/Kerberos 是您想要使用的。我要补充一点,Java 存在一个障碍:默认情况下,JGSS 使用自己的 GSSAPI 和 Kerberos 实现,在 JDK 中用 Java 编写,而不是平台的库。因此,它不遵守您现有的配置,也不能像其他任何东西一样工作(例如,在 Unix 上,它不尊重 KRB5CCNAME 或您习惯的其他环境变量,无法使用 DNS 定位 KDC,具有不同的支持密码集等)。它也是越野车和有限的;例如,它不能跟随推荐。

在 Unix 平台上,您可以告诉 JGSS 绕过 JDK 代码并通过使用以下命令启动 JVM 来使用外部 GSSAPI 库:

-Dsun.security.jgss.native=true -Dsun.security.jgss.lib=/path/to/libgssapi_krb5.so

但是,在 Windows 上没有使用 SSPI 的类似选项。这看起来很有希望:

http://dblock.github.com/waffle/

...但我还没有解决这个问题。

于 2012-08-22T04:23:39.460 回答