将凭据从 PHP Web 应用程序发送到 Java Web 应用程序


Sending credentials from PHP web application to Java web application

我有一个Web PHP Web应用程序,其中包含指向Java Web应用程序的链接。 php 应用程序有一个登录页面和一个指向 java 应用程序的链接,但并非每个用户都有权访问 java Web 应用程序。 我试图做的是将用户凭据从 php 应用程序发送到 java 应用程序,然后 java 应用程序检查凭据以及用户日志是否正确。 我正在考虑使用 http 标头来执行此操作。

所以我的问题是如何将用户凭据从 PHP 应用程序发送到 Java 应用程序?

如果有帮助,我正在使用一个名为Vaadin的Java Web框架。

从 PHP 应用程序到 java 应用程序执行正常的 POST 请求。这可以简单地完成,就像在PHP应用程序中使用普通的HTML表单一样,将表单的方法设置为"POST"并将操作设置为Java应用程序的URL。如果要在 Vaadin 应用程序中捕获 HTTP 参数,可以使用请求处理程序 (https://vaadin.com/book/vaadin7/-/page/advanced.requesthandler.html) 来实现。

然后是几句建议或至少要考虑的事情。如果您的登录页面在PHP应用程序中,并且您的"管理员"应用程序是Vaadin应用程序,那么我不建议您在Vaadin应用程序中进行凭据检查。这是因为当您进入 Vaadin 应用程序时,会创建一个新的应用程序实例。这意味着您的 UI 将被初始化,以及您在 UI 的 init 方法中执行的任何其他操作。您可能想要做的是阻止用户进入Vaadin应用程序,除非她已登录 - 这意味着您需要在其他地方进行凭据检查 - 例如,有一个单独的servlet,其唯一职责是登录用户。如果授予登录,则授予对 Vaadin 应用程序的访问权限,如果访问被拒绝,则将用户转发到 PHP 登录屏幕。下一个问题是,您如何阻止用户在登录之前访问 Vaadin 应用程序?通常,这是使用 servlet 过滤器完成的。

我强烈建议您使用第三方框架进行身份验证和授权。看看 http://shiro.apache.org/,它易于安装,似乎与Vaadin配合得很好。您需要做的就是配置它并实现登录屏幕,框架将负责其余的工作。

如果我理解您的问题,您希望能够为登录到PHP应用程序的某些特定用户提供"自动登录链接"。此链接应该会自动将用户登录到 java 应用程序,对吗?

在不知道有关此案例的任何详细信息的情况下,例如两个应用程序是否在同一域上运行,或者它们是否使用相同的数据库(两个应用程序中的用户凭据相同)等,我会提出以下解决方案:

在 java 应用程序上创建一个操作(链接),该应用程序接收创建会话所需的必要参数(作为 GET)(可能 userId 就足够了)、时间戳和所有参数的签名。例如:

http://javaapp.example.com/autologin?userId=123&timeStamp=123456789&sign=hj23kh4j234jk324h

其中签名是使用一些强大的加密算法计算的。然后,验证接收端(java 应用程序)的签名是否正确。如果正确,则创建会话。签名计算可以是这样的:

$signature = sha1($userId . $timeStamp ."一些盐" .$sharedSecretBetweenBothApps);

使用

时间戳,您可以检查是否未使用旧链接。例如,不允许超过 15 分钟旧的链接,并将使用的链接存储在 java 应用程序中,以确保它们永远不会被重复使用。您不必保留早于过期时间的链接历史记录。

另一个想法,如评论中所讨论的,是在java端创建一个API,它能够提供一次性链接。

sha1 算法可能不够强大,但显示了这个想法并且易于实现。

这回答了你的问题吗?