Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将凭证从PHP web应用程序发送到Java web应用程序_Java_Php_Http_Vaadin - Fatal编程技术网

将凭证从PHP web应用程序发送到Java web应用程序

将凭证从PHP web应用程序发送到Java web应用程序,java,php,http,vaadin,Java,Php,Http,Vaadin,我有一个web PHP web应用程序,它有一个指向java web应用程序的链接。php应用程序有一个登录页面和指向java应用程序的链接,但并非每个用户都有访问java web应用程序的权限。我试图做的是将用户凭证从php应用程序发送到java应用程序,然后java应用程序检查凭证以及用户是否正确登录。我正在考虑使用http头来实现这一点 所以我的问题是,如何将用户凭证从PHP应用程序发送到java应用程序 如果有帮助的话,我正在使用一个名为Vaadin的Java web框架。如果我理解了您

我有一个web PHP web应用程序,它有一个指向java web应用程序的链接。php应用程序有一个登录页面和指向java应用程序的链接,但并非每个用户都有访问java web应用程序的权限。我试图做的是将用户凭证从php应用程序发送到java应用程序,然后java应用程序检查凭证以及用户是否正确登录。我正在考虑使用http头来实现这一点

所以我的问题是,如何将用户凭证从PHP应用程序发送到java应用程序


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

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

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

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

其中签名是使用某种强加密算法计算的。然后在java应用程序的接收端验证签名是否正确。如果正确,则创建会话。签名计算可能类似于:

$signature=sha1$userId$时间戳。”来点盐$两个应用程序之间的共享secret

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

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

sha1算法可能不够强大,但它展示了这一思想,并且易于实现


这是否回答了您的问题?

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

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

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

其中签名是使用某种强加密算法计算的。然后在java应用程序的接收端验证签名是否正确。如果正确,则创建会话。签名计算可能类似于:

$signature=sha1$userId$时间戳。”来点盐$两个应用程序之间的共享secret

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

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

sha1算法可能不够强大,但它展示了这一思想,并且易于实现


这是否回答了您的问题?

执行从PHP应用程序到java应用程序的普通POST请求。这可以像在PHP应用程序中使用普通HTML表单一样简单,将表单的方法设置为POST,并将操作设置为java应用程序的URL。如果您想在Vaadin应用程序中捕获HTTP参数,可以通过使用请求处理程序来实现

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


我强烈建议您使用第三方框架进行身份验证和授权。看一看,它很容易安装,似乎与Vaadin配合得很好。您所需要做的就是配置它并实现一个登录屏幕,框架将处理其余部分。

执行从PHP应用程序到java应用程序的普通POST请求。这可以像在PHP应用程序中使用普通HTML表单一样简单,将表单的方法设置为POST,并将操作设置为java应用程序的URL。如果您想在Vaadin应用程序中捕获HTTP参数,可以通过使用请求处理程序来实现

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


我强烈建议您使用第三方框架进行身份验证和授权。看一看,它很容易安装,似乎与Vaadin配合得很好。您所需要做的就是配置它并实现一个登录屏幕,框架将处理其余部分。

这两个应用程序之间的链接是什么?我不确定。我创建了java应用程序,有人想在php应用程序中添加指向我的应用程序的链接。我的应用程序运行在tomcat服务器上,因此我相信该链接将具有指向我的应用程序的url。这两个应用程序之间的链接是什么?我不确定。我创建了java应用程序,有人想在php应用程序中添加指向我的应用程序的链接。我的应用程序运行在tomcat服务器上,因此我相信链接将包含指向我的应用程序的url。这种方法存在安全漏洞,使用的签名几乎等同于在url中发送密码-任何人在任何时候获得令牌,都可以在任何其他时间点使用它登录。您还将令牌作为GET参数发送,这意味着它将记录在浏览器历史记录和服务器日志中。任何有权访问这些内容的人都可以使用您的凭据登录。使用登录令牌是可以的,但它们必须是安全的——也就是说,您不能多次使用一个toke。这可以通过使用应用程序之间共享的一次性密码来实现。对,实际上,您可能会在URL中有一个时间戳,并包含在签名中。或者更好的做法是在java应用程序上构建一个API,可以创建这些一次性登录链接。当然,API只能从服务器端使用。一次性链接如果不使用,也会在一段时间后过期。这种方法存在安全漏洞,使用的签名几乎等同于在URL中发送密码-任何人在任何时候获得令牌,都可以在任何其他时间点使用令牌登录。您还将令牌作为GET参数发送,这意味着它将记录在浏览器历史记录和服务器日志中。任何有权访问这些内容的人都可以使用您的凭据登录。使用登录令牌是可以的,但它们必须是安全的——也就是说,您不能多次使用一个toke。这可以通过使用应用程序之间共享的一次性密码来实现。对,实际上,您可能会在URL中有一个时间戳,并包含在签名中。或者更好的做法是在java应用程序上构建一个API,可以创建这些一次性登录链接。当然,API只能从服务器端使用。一次性链接如果不使用,也会在一段时间后过期。