dra*_*ank 1 .net php java server-side
我有一个Java应用程序,我需要将我们现有的PHP网站与之集成.供应商希望我们进行服务器端重定向以允许安全身份验证和单点登录,但我不确定如何在PHP中执行此操作.供应商解释了工作流程如下:
这将允许我们的PHP应用程序安全地与Java应用程序通信,并且客户端永远不必发送任何类型的身份验证.
据我所知,.NET和Java内置了这种功能,但我无法在PHP中找到这样做的方法.有任何想法吗?
UPDATE
我不是在谈论使用标题("位置:......"); 函数进行重定向.具有此服务器端重定向的踢球者是应用程序执行身份验证并将所有信息发送回客户端,以便客户端随后登录.使用标头("位置:...")只是强制浏览器运行别处.
更新2
autologin.php(模拟用户通过curl登录外部应用程序)
// The login 'form' is at login.php
$ch = curl_init('http://domain.local/login.php');
// We are posting 2 variables, and returning the transfer just so it doesn't dump out
// Headers are processed by the callback function processHeaders()
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'processHeaders');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=user&password=pass');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Execute curl, close the connection, and redirect the user to a 'restricted' page
$response = curl_exec($ch);
curl_close($ch);
header("Location: http://domain.local/restricted.php");
function processHeaders($ch, $header) {
// Dump the response headers to the client
header($header);
strlen($header);
}
Run Code Online (Sandbox Code Playgroud)
login.php(包含'登录'表单)
session_start();
if($_POST) {
if($_POST['username'] == 'user' && $_POST['password'] == 'pass') {
$_SESSION['auth'] = 1;
$_SESSION['token'] = md5(time());
} else {
echo 'Auth failed';
}
} else {
echo 'Invalid access type';
}
Run Code Online (Sandbox Code Playgroud)
restricted.php(限制页面)
session_start();
if($_SESSION['auth']) {
echo 'Secret Token: '.$_SESSION['token'];
} else {
echo 'Please log in';
}
Run Code Online (Sandbox Code Playgroud)
想法是用户想要最终到达'restricted.php'.'login.php'包含登录所需的代码.我想模拟的是用户在'login.php'上填写表单并将用户登录到'restricted.php'.
上面的代码片段在我的本地测试中一起工作(命中autologin.php重定向到restricted.php并打印出秘密令牌),但我似乎无法让它在跨应用程序中工作.该应用程序将在同一个域(https://domain.com/myapp,https://domain.com:1234/vendorapp).
我以前从未用任何语言做过这件事,我只是关注我的供应商告诉我他们做过的事情.显然他们以前从未处理过PHP,也不知道该怎么做.
像这样:
header("Location: http://www.example.com/")
Run Code Online (Sandbox Code Playgroud)
但它必须先于任何其他代码...请参阅php.net
您只需header()像这样输出一个普通的 HTTP 重定向:
<?php header('Location: http://www.example.com/'); ?>
Run Code Online (Sandbox Code Playgroud)
重新更新
如果我理解正确,你需要这样做:
第 4 步,解析信息,取决于您发送和接收信息的方式。如果您通过 cURL 在标头中收到它们,则需要设置 CURLOPT_HEADER为true并解析响应中的必要数据。这可能就像在第一个空行上拆分字符串一样简单或更复杂,这取决于您的具体情况。
如何在您的应用程序中登录用户也是您需要处理的事情。JSP 应用程序可能会处理实际的密码和用户名,并将您需要跟踪的某种令牌交还给您。
| 归档时间: |
|
| 查看次数: |
6504 次 |
| 最近记录: |