通过 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 会话进行服务器身份验证的主要内容,如果未能解决你的问题,请参考以下文章

(实用篇)php通过会话控制实现身份验证实例

如何检查用户是不是通过 Laravel 上的 cookie 会话进行身份验证?

通过令牌进行身份验证,如果令牌失败,则通过会话进行身份验证,使用 Passport?

与 PHP 共享 Laravel 身份验证/会话

如何针对跨域的 PHP 会话 ID 对 Socket.IO 进行身份验证

通过 spring-boot 进行 Spring WS UsernameToken 身份验证 + 会话管理