私はPHPを使用して、次の認証Webサービスを書かれている:複数のアプリケーションから使用できる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に適切にルーティングします。
私はこのウェブサービスの反対側で何をする必要があるのですか。あなたがこのフォームのアクションは、以前からauthenticate.phpであり、我々は、POSTメソッドを使用している見ることができます
<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>
:たとえば、私は、単純な電子/のNode.jsアプリケーションからこのログインフォームを持っていると言います。しかし、(期待どおりに)ユーザがユーザ名/パスワードを送信すると、ページは物理的にauthenticate.phpにルーティングされます。これは、さまざまなアプリケーションからこのWebサービスを起動する場合にはうまくありません。
また、jQuery経由でajax呼び出しを使用してダブリングを試みました。しかし、ジャバスクリプトに正しいブレークポイントを設定すると、少し精通したプログラマでもプレーンテキストのパスワードを見ることができるという明らかな欠点があります。
私の理想的なケースは、ユーザ名とパスワードをフェンスの反対側に投げることです。その後、webserviceは真偽を他の情報と一緒にアプリケーションに戻します。このようにして、Webサービスは認証を処理し、アプリケーションは成功/失敗に基づいて何が行われる必要があるかを処理します。そして、明らかに私はこれを最初から最後まで安全にしようとしています。
私がレイアウトしたことを考えれば、このようなログイン/認証プロセスはどのように達成できますか?
アクションでは、なぜあなたがそのページにリダイレクトしているのか、あなたはあなたにウェブサービスを提供しています。代わりにあなたのアクションのいくつかの他のページを与えることができます、そこからあなたのWebサービスを呼び出すことができます。 –