通过 PHP 会话进行服务器身份验证
Posted
技术标签:
【中文标题】通过 PHP 会话进行服务器身份验证【英文标题】:Server authentication via PHP session 【发布时间】:2015-12-27 18:40:40 【问题描述】:关于将我的 C# 服务器上的身份验证从 Login\Password 更改为 php 会话的可能性,我有一个小问题。我使用 PHP、html5 和 javascript 作为客户端,使用带有 WebSockets lib 的 C# 服务器作为服务器端。我已经有授权码,但它只适用于登录名和密码。
嗯,我有相同的验证码,通过 PHP 检查登录名和密码。但是如何通过使用 WebSockets 和 PHP 会话来授权 C# 服务器上的客户端,而不是帐户登录名和密码?
小图:
这可能吗?以及任何代码、演示等?
【问题讨论】:
您可以像md5(time())
一样在php中生成令牌,将其保存在数据库中并在C#中从数据库中读取令牌,然后您可以将所有存储在会话中的内容保存在数据库中。然后您可以将令牌存储在 cookie 或 localStorage 中。您将拥有自己的会话机制。
【参考方案1】:
生成您的 c# 服务器可以验证的访问令牌。这就是我将如何实现它:
在您的 PHP 和 C# 服务器之间共享一个秘密(例如 64 randcom 字节)
当 PHP 验证用户/登录时,生成一个令牌:它包含随机字符、用户 ID 和使用共享密钥创建的签名。例如。像这样:
$random = base64_encode(mcrypt_create_iv(32));
$token = $random . '_' . $userID . '_' . hash_hmac('sha256', $random . '_' . $userID, SHARED_SECRET);
然后,C# 服务器可以通过使用共享密钥计算 $random 和 $token 的 HMAC 签名来验证此令牌。如果正确,C# 服务器可以使用 $userID 和 mysql 数据库。
只要你通过 https 将令牌传递给你的 JS 代码,你就应该是安全的。
P.S.:您可以通过在令牌中添加过期日期来提高该方案的安全性,并使您的 JS 代码及时请求新的令牌。不要忘记在签名中包含到期日期。
【讨论】:
以上是关于通过 PHP 会话进行服务器身份验证的主要内容,如果未能解决你的问题,请参考以下文章
如何检查用户是不是通过 Laravel 上的 cookie 会话进行身份验证?
通过令牌进行身份验证,如果令牌失败,则通过会话进行身份验证,使用 Passport?