繁体   English   中英

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

[英]How to write a java web service to do remote login?

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

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

任何人都可以建议吗?

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

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

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

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

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

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

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

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

希望有所帮助!

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

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

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

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

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

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

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

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

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

祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM