使用 Steam OpenId 登录(oidc-client-js)
Posted
技术标签:
【中文标题】使用 Steam OpenId 登录(oidc-client-js)【英文标题】:Login with Steam OpenId(oidc-client-js) 【发布时间】:2018-07-25 12:28:43 【问题描述】:当客户端身份验证,接收 token_id,将其发送到服务器和服务器检索该 token_id 的客户端帐户信息库时,我已经完成了 google 身份验证。这很容易,因为它是documented。现在我尝试使用 Steam,但实际上我在 steam docs 中有 4 行关于 OpenID 的内容。我开始使用 openID 浏览器库 oidc-client-js 但 Steam 文档对我没有帮助。 openID 库需要这些字段:
权限 client_id redirect_uri response_type 范围Steam 文档只提供提供商、密钥和域名,我真的不知道从哪里开始。
只需为您的语言和平台下载一个 OpenID 库 选择并使用http://steamcommunity.com/openid 作为提供者。这 返回的 Claimed ID 将包含用户的 64 位 SteamID。这 声称的 ID 格式为:http://steamcommunity.com/openid/id/
我遇到 CORS Header 问题,因为我使用 localhost 而不是安全连接,我认为我需要在 oidc-client-js 中配置其他字段:
元数据 签名密钥我们将感谢任何帮助。
【问题讨论】:
【参考方案1】:tl;dr:Steam 不是 OpenID Connect 提供商
我遇到了完全相同的问题。
我尝试在禁用 CORS 的情况下运行 chrome 以查看它是否可以工作,我收到了来自 oidc-client 的错误:
SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at XMLHttpRequest.s.onload (oidc-client.min.js?3809:1)
这很容易理解,因为https://steamcommunity.com/openid/.well-known/openid-configuration 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service priority="0">
<Type>http://specs.openid.net/auth/2.0/server</Type>
<URI>https://steamcommunity.com/openid/login</URI>
</Service>
</XRD>
</xrds:XRDS>
这显然不是 JSON。
类型应答器中的 URL 重定向到 http://openid.net/specs/openid-authentication-2_0.html,可以在 OpenID specifications page 的过时部分中找到。
另外,你可以在OpenID Connect Discovery specification page找到那个
支持发现的 OpenID 提供者必须在通过将字符串 /.well-known/openid-configuration 连接到颁发者形成的路径上提供 JSON 文档。
这证实了 Steam OpenID 端点的 .wellknown/openid-configuration 文件不是为 OpenID Connect制作的。
所以我认为可以肯定地说 Steam 坚持使用 OpenID 2.0,而不是 OpenID Connect 提供商。
现在我必须寻找一个 OpenID 2.0 js 客户端,或者切换到 Google 登录。
【讨论】:
【参考方案2】:您可以使用我的 Steam OpenID Connect Provider: https://github.com/ImperialPlugins/steam-openid-connect-provider
它也可以作为 DockerHub 上的 docker 镜像使用: https://hub.docker.com/r/imperialplugins/steam-openid-connect-provider
这允许您将 OpenID Connect 与 Steam 一起使用。
【讨论】:
以上是关于使用 Steam OpenId 登录(oidc-client-js)的主要内容,如果未能解决你的问题,请参考以下文章
如何将 OPENID auth 集成到 REST api 和前端框架架构中
使用 Steam OmniAuth gem 连接 Steam 的 OpenId 会出现“invalid_credentials”错误