使用Java小程序单点登录(OpenID、OAuth等)?

使用Java小程序单点登录(OpenID、OAuth等)?,oauth,applet,openid,single-sign-on,Oauth,Applet,Openid,Single Sign On,在我们的示例中,我们现在使用一个带有Java小程序客户端(嵌入哑HTML页面)和Java服务器的体系结构,通过套接字(通过SSL)进行通信 用户必须使用用户名和密码登录系统(希望不是共享的)-然后密码以哈希形式存储在我们的数据库中 最近读了Jeff的文章后,我考虑允许我们的用户使用其他机制登录,比如OpenID,这样他们就不必记住用户名和密码,但我们仍然知道该用户与前一天从另一台计算机登录的用户相同 据我所知,OpenID通过使用浏览器重定向和一些服务器端加密技术来工作。这看起来很复杂(如果不是

在我们的示例中,我们现在使用一个带有Java小程序客户端(嵌入哑HTML页面)和Java服务器的体系结构,通过套接字(通过SSL)进行通信

用户必须使用用户名和密码登录系统(希望不是共享的)-然后密码以哈希形式存储在我们的数据库中

最近读了Jeff的文章后,我考虑允许我们的用户使用其他机制登录,比如OpenID,这样他们就不必记住用户名和密码,但我们仍然知道该用户与前一天从另一台计算机登录的用户相同

据我所知,OpenID通过使用浏览器重定向和一些服务器端加密技术来工作。这看起来很复杂(如果不是不可能的话)要与我们的applet(或者applet与非HTTP服务器相结合,真的),应该允许在这里登录

OAuth或者使用类似的机制,或者向用户提供一些令牌,然后用户将这些令牌输入到我的小程序中。小程序必须将此令牌存储在客户端(按照JNLP PersistenceService或类似方式),以允许重复登录,但这意味着每台计算机都要获得一个新的令牌,不容易让多个用户共享一台计算机(帐户),也不太简化登录


这里是否有其他方法可以用于启用单一登录系统,或者,如果不至少获取一些HTTP服务器端代码将凭据传输到我们的小程序,这是不可能的?

您可以使用OpenId在小程序外部使用以下方法之一登录您的用户。这将是正常的流程,包括服务器端进程和将用户重定向到OpenId提供者的页面。然后将用户Id传递给小程序:

<object codetype="application/java" ...>
    <param name="user" value="myOpenId">
</object>


然后,您可以使用
this.getParameter(“用户”)

对用户进行身份验证。如果我理解正确,这实际上允许任何人使用任何OpenID(您只需要在本地修改HTML代码)进入。我认为这不是一个安全的实现。这至少需要我的web服务器提供一些签名,以向小程序(及其服务器)确认OpenID身份验证成功。没错,您可以对参数进行编码,或者传递由服务器生成并指向用户的密钥。