当前位置: 首页 > 知识库问答 >
问题:

无需Windows登录即可对富客户端(“胖客户端”)进行单点登录

施弘壮
2023-03-14

web应用程序的单点登录(SSO)(通过浏览器使用)已得到充分的证明和确立。为富客户端建立SSO比较困难,通常建议基于Kerberos票证,尤其是使用Windows登录域中的ActiveDirectory。

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

我的问题基本上是“我怎么做?”?更具体地说,

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

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

c) 是否有任何API/框架用于在网络上推送kerberos(如TGT和会话票证)?

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

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

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

感谢您的意见,建议和答案!

米库

共有2个答案

慕容宇
2023-03-14

同意Michael的观点,即您要使用GSSAPI/Kerberos。但是,我要补充的是,Java有一个障碍:默认情况下,JGSS使用自己的GSSAPI和Kerberos实现,在JDK中用Java编写,而不是使用平台的库。因此,它不符合您现有的html" target="_blank">配置,也不像其他任何东西一样工作(例如,在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/

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

景修杰
2023-03-14

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

这一切都是可行的,您需要:

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

你自己怎么了?

 类似资料:
  • 关于SAML及其通过Shibboleth的实现,我有很多问题。我已经做了大量的研究,我想澄清一些事情。我有一个与服务器通信的移动应用程序。我们的一个企业客户,我们称之为StackOverflow大学,希望使用Shibboleth(或者我应该说SAML?)为我们的系统提供SSO。他们已经给我们发送了所有学生的电子邮件地址和基本资料。使用OAuth2,我们确切地知道如何提供SSO,但是,使用SAML,

  •  说明 调用方法: $.f2e.util.yy.isInstallYY(fn); 函数说明: UDB登陆 参数说明: 参数名 类型 说明 备注 fn function 回调函数 null为未登录YY客户端 无 脚本 <script> $.f2e.util.yy.isInstallYY(function(data){ if(data){ //有登录

  • 我用Jhipster生成器生成了一个项目,并尝试使用android客户端连接到服务器。我的登录部分有问题,我不知道如何生成/获取登录所需的csrf令牌。我看到web客户端将此令牌作为请求的一部分发送。 当我试图从邮递员和Android访问路线我收到这个错误: 谢谢

  • 我使用JMeter的HTTP(S)测试脚本记录器记录SAP CRM Web客户端的登录。我使用在浏览器开发工具(MYSAPSSO2、Session ID、Sap-usercontext)中看到的Cookie配置了HTTP Cookie Manager。 在同一个记录测试中,我在SAP中填充了一些字段。我停止了录音测试。 我做了多次来查看哪些参数是动态的,我意识到wfc-secure-id和C5_c

  • 我试图使用Microsoft Graph API从应用程序管理Azure AD B2C用户,但我无法使用我的客户端id/secret进行身份验证。 首先,我按照这里的步骤注册了一个应用程序:https://docs.microsoft.com/en-us/azure/active-directory-b2c/microsoft-graph-get-started?tabs=app-雷加 在文章的最

  • 问题内容: 我对Java EE还是很陌生,在开始我要创建的应用程序上遇到很多麻烦。我想要的是一个连接到EJB项目的Swing应用程序客户端。我正在使用Glassfish v3.1.1。到目前为止,我有两个无状态的Bean,其中一个是使用@DeclareRoles和Glassfish中的JDBC领域来保护的,另一个是客户端的开始。 运行客户端时,您可以选择用户名,键入密码,然后登录。如果使用正确的密