如何编写java web服务来进行远程登录?

时间:2008-12-06 12:32:14

标签: java web-services

我有两个申请。我需要从应用程序a到应用程序b进行单点登录。

我想使用网络服务。我想知道如何采用这种方法。

有人可以提供建议吗?

6 个答案:

答案 0 :(得分:3)

假设这些是Web应用程序 - 您必须在应用程序之间实现某种类型的共享信任模型。

在任何情况下都不应该自己编写。这太容易搞砸了,有很多现有的(开放的和商业的)可供选择。

以下是以下选项: 1 - 如果每个人都在运行Windows - 你可以只使用Windows Native Authentication(又名SPNEGO) 2 - 您可以实现某种类型的SSO系统。常用系统包括CAS,Oracle Access Manager,CA SiteMinder,Sun SSO和IBM Tivoli Access Manager。虽然CAS是开源的,但其他的也允许您实现授权,而CAS只进行身份验证。

最后 - 确保您选择的任何选项 - 它与您的语言的本机身份验证和&授权框架。在Java中,这将是JAAS。在.NET中,它将是.NET安全框架。对于PHP / Perl - 您可以利用Apache模块。这样做的好处是,您不必成为安全专家,而且可以更轻松地使用外部系统进行身份验证。授权,无需重新编码您的应用。

答案 1 :(得分:2)

您可以使用公钥身份验证方案。

使用公钥和私钥创建密钥对(使用Java的keytool,GNU GPG或类似的工具)。使用私钥对应用程序A上的一条信息(例如用户名)进行签名,并创建一个指向应用程序B的链接,该应用程序可从应用程序A访问并包含签名数据。然后,应用程序B可以在使用公钥验证请求确实来自应用程序A(如果能够解密字符串时必须具有该请求)之后登录用户。

当然,您也可以创建相反的密钥对来导航另一种方式,或者您可以使用公钥并保密(有效地使其成为共享秘密系统)。

如果用户尝试直接访问应用程序B,您还可以将其重定向到应用程序A,其参数表明他来自应用程序B(或执行引荐来源检查)。如果他已经登录到应用程序A,则使用签名数据创建链接并重定向到该链接,否则在登录后向他显示登录屏幕并重定向。

希望有所帮助!

答案 2 :(得分:0)

您可以使用现有的开源产品CAS,然后实施它而不是开发自己的产品。这样,您就可以与支持相同协议的其他应用程序集成。即使您决定实施自己的代码而不是使用他们的代码,网站上提供的许多想法对您来说都很有用。

答案 3 :(得分:0)

如果应用程序托管在同一服务器中,则可以将其配置为使用单点登录。例如,在Tomcat中,这是通过Valve实现的。

如果应用程序位于不同的环境中,那么安全的Web服务是个好主意。例如,您可以创建公钥 - 私钥对,并在客户端证书上使应用程序b(服务器)对应用程序(客户端)进行身份验证。这意味着应用程序a将使用客户端证书对应用程序b的所有请求进行签名。完整解决方案需要有关架构的更多详细信息。

答案 4 :(得分:0)

您使用的是应用服务器吗?您的应用程序的环境是什么?

使用名为Web Service Security UsernameToken Profile的Web服务传播身份的标准。这是一个快速的overview。您可以发送用户名/密码或各种令牌,例如X.509证书或SAML断言。一些应用程序服务器Web服务堆栈将处理WSS UsernameToken Profile,JBoss,Websphere和WebLogic。否则,Web服务代码必须处理它。根据您的环境,这种方法可能过于繁琐。

单点登录有一个标准,称为SAML。同样,这可能对您的用例来说太重了。

答案 5 :(得分:0)

在Oracle的土地上,我知道有一个受信任的应用程序的概念。基本上,如果您可以控制两个应用程序,可以这样设置:

应用程序A发送应用程序B,1)应用程序A的用户名和密码以及2)当前用户的用户名。由于B知道并信任应用程序A,因此它不需要验证用户的凭据,因为它知道应用程序A已经为它执行了此操作。

我认为如果你有一个自定义应用程序B,你可能会做这样的事情。如果您的SSO实现支持这一点,那么除了设计您的Web服务之外,您可能不需要做很多事情。

祝你好运