gpt4 book ai didi

javascript - 如何创建可从多个应用程序使用的 PHP 登录 Web 服务?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:05 25 4
gpt4 key购买 nike

我使用 php 编写了以下身份验证 Web 服务:

authenticate.php

<?php      
require('_includes.php');
$username = fetchPostParam('username');
$password = fetchPostParam('password');

// A higher "cost" is more secure but consumes more processing power
$cost = 10;

$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');

// this is so php can recognize / verify this later. "$2a$" Means we're using the Blowfish algorithm. The following two digits are the cost parameter.
$salt = sprintf("$2a$%02d$", $cost) . $salt;
$hash = crypt($password, $salt);

//grab the username/password from the database
$mysqli = getMysqlConnection();
if (mysqli_connect_errno()) {printf("Connect failed: %s\n", mysqli_connect_error());exit();}
$query = "SELECT * FROM usercreds where username = '{$username}'";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
$dbusername = $row["username"];
$dbhash = $row["hash"];
}
$result->close();
}
$mysqli->close();
if($username == $dbusername && password_verify($password, $dbhash))
{
// ????????????????????
}
else
{
// ????????????????????
}
?>

我有多个应用程序,用户可以使用这些应用程序登录他们的帐户,因此我试图让这个 Web 服务成为我的应用程序系列的“通用”服务。此 PHP 服务中的所有内容都运行良好。您通过 HTTPS POST 将用户凭据发送到正确的 url,它对其进行身份验证,然后根据身份验证是否成功正确路由到末尾的 if-else。

我被绊倒的地方是我需要在该 Web 服务的另一端做的事情。例如,假设我的简单 electron/node.js 应用程序有这个登录表单:

<form id="loginform" method="POST" action="https://localhost:8888/webservices/authenticate.php">
<input type="text" name="username" id="username_field" placeholder="Username"/><br />
<input type="password" name="password" id="password_field" placeholder="Password"/><br />

<button type="submit" id="login_button">Let's do this!</button><br />
</form>

可以看到这个表单的action是之前的authenticate.php,我们使用的是POST方法。但是(正如预期的那样),当用户提交他们的用户名/密码时,页面物理上会路由到 authenticate.php,如果我们要从许多不同的应用程序访问此 Web 服务,这不是一件好事。

我还尝试通过 jQuery 尝试使用 ajax 调用。然而,这样做有一个明显的缺点,即如果在 javascript 中设置正确的断点,即使是稍微精明的程序员也可以看到明文密码。

我理想的情况是将用户名和密码扔到栅栏的另一边,然后网络服务将返回真或假,连同一些其他信息,给应用程序。这样,Web 服务处理身份验证,应用程序根据成功/失败处理需要完成的操作。显然,我正在努力确保从头到尾的安全。

根据我的布局,我如何实现这种登录/身份验证过程?

最佳答案

为什么不在 PHP 中实现 OAuth,请查看 link更多细节。正如您所说,您想将它用于多个 Web 应用程序,所以我认为 OAuth 是最好的。

关于javascript - 如何创建可从多个应用程序使用的 PHP 登录 Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37018481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com