我花了一天的大部分时间试图弄清楚OpenID是如何工作的。我的目标是建立一个简单的网站,点击登录按钮,用户就会被带到Steam登录页面,在那里他们会被提示输入用户名和密码。成功登录后,用户被重定向到我的域上的一个页面,在那里我收集查询字符串参数。它们看起来像这样:
{
"openid.ns": "http://specs.openid.net/auth/2.0",
"openid.mode": "id_res",
"openid.op_endpoint": "https://steamcommunity.com/openid/login",
"openid.claimed_id": "https://steamcommunity.com/openid/id/7656119[0000000000]",
"openid.identity": "https://steamcommunity.com/openid/id/7656119[0000000000]",
"openid.return_to": "http://127.0.0.1:8000/resolve",
"openid.response_nonce": "2018-12-01T14:49:46Z30hhn2/[someTEXTendingIN=]",
"openid.assoc_handle": "1234567890",
"openid.signed": "signed,op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle",
"openid.sig": "[someTEXTandNUMBERSendingIN=]"
}
但我无法解决的是实际的身份验证问题。我不知道该怎么处理这些数据。我想拥有自己的数据库,在那里我可以存储有关用户的更多信息,如朋友、消息、货币等。为此,我可以验证某人是否只是接受了这个请求体,将他们的ID更改为另一个,并以这种方式访问他们的帐户,这一点非常重要。
我很确定这些都是相关的文档,但我仍然不清楚。我应该如何用这些数据验证用户?
我在这篇文章中省略了一些价值观,我担心分享这些价值观可能会很糟糕。这些占位符已用括号[]
概括。此外,assoc_handle
实际上是1234567890
,这让我有点反感,因为根据OpenID文档,它用于确定签名。
需要明确的是:这个收集凭据的页面不是由我运行的,而是Steam的官方OpenID登录页面。Steam是一个游戏平台。https://steamcommunity.com/dev/以供参考。
对于nodejs中的Steam身份验证,您可以使用Passport。
Passport是一个身份验证库,最适合与基于Express的web应用程序配合使用。
有一种steam策略可以处理您的steam身份验证。
在这里检查护照
这就是Steam战略的存储库。有一个示例文件夹,您可以看到如何设置Steam身份验证。