5

当客户端身份验证,接收 token_id,将其发送到服务器和服务器检索该 token_id 的客户端帐户信息库时,我已经使用谷歌完成了身份验证。这很容易,因为它已记录在案。现在我尝试使用 Steam,但实际上我在steam docs中有 4 行关于 OpenID 的内容。我开始使用 openID 浏览器库oidc-client-js但 Steam 文档对我没有帮助。openID 库需要这些字段:

  • 权威
  • client_id
  • 重定向uri
  • 响应类型
  • 范围

Steam 文档只提供提供商、密钥和域名,我真的不知道从哪里开始。

只需为您选择的语言和平台下载 OpenID 库,并使用http://steamcommunity.com/openid作为提供程序。返回的 Claimed ID 将包含用户的 64 位 SteamID。声明的 ID 格式为:http ://steamcommunity.com/openid/id/

我得到 CORS Header 问题,因为我使用 localhost 而不是安全连接,我认为我需要在 oidc-client-js 中配置其他字段:

  • 元数据
  • 签名密钥

任何帮助将不胜感激

4

2 回答 2

11

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。

Type balise 中的 URL 重定向到http://openid.net/specs/openid-authentication-2_0.html,可以在OpenID 规范页面的过时部分找到。

此外,您可以在OpenID Connect Discovery 规范页面中找到

支持发现的 OpenID 提供者必须在通过将字符串 /.well-known/openid-configuration 连接到颁发者形成的路径上提供 JSON 文档。

这证实了 Steam OpenID 端点的 .wellknown/openid-configuration 文件不是为 OpenID Connect制作的。

所以我认为可以肯定地说 Steam 坚持使用 OpenID 2.0,而不是 OpenID Connect 提供商。

现在我必须寻找一个 OpenID 2.0 js 客户端,或者切换到 Google Sign-In。

于 2018-04-12T16:30:19.007 回答
0

您可以使用我的 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 一起使用。

于 2020-04-30T04:21:40.773 回答