You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用oidc-client-js对接Steam OpenID认证遇阻,求参数配置指引

解决 Steam OpenID 与 oidc-client-js 对接的配置难题

我之前也踩过Steam OpenID的坑,它的文档确实少得可怜,而且核心问题在于:Steam 实现的是OpenID 2.0规范,而oidc-client-js是专门为**OpenID Connect (OIDC)**打造的,这就是你觉得配置项对不上的原因。不过我们可以通过自定义配置来让两者兼容,下面是具体的配置方案和细节说明:

核心配置项填写指南

直接给你能用的配置模板,每个字段我都标了注释:

const steamOidcConfig = {
  // Steam OpenID的提供者根地址,固定值
  authority: 'https://steamcommunity.com/openid',
  // 这里填你的网站完整域名(必须是Steam开发者后台验证过的),对应Steam的realm参数
  client_id: 'https://your-website-domain.com',
  // 回调地址,必须和client_id的域名一致
  redirect_uri: 'https://your-website-domain.com/steam-callback',
  // 适配Steam的OpenID 2.0,只需要基础的openid scope
  response_type: 'id_token',
  scope: 'openid',
  // 手动配置元数据,因为Steam不提供标准OIDC元数据端点
  metadata: {
    issuer: 'https://steamcommunity.com/openid',
    // Steam的认证登录页面地址
    authorization_endpoint: 'https://steamcommunity.com/openid/login',
    // 获取用户信息的Steam API(需要用SteamID+你的API Key调用)
    userinfo_endpoint: 'https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/'
  }
};

关键细节解释

  • client_id的特殊用法:Steam没有像Google那样的客户端ID,这里的域名是用来标识你的应用(对应Steam OpenID里的realm参数),必须和你在Steam开发者后台配置的域名完全一致,否则认证会失败。
  • 元数据手动配置oidc-client-js默认会从authority地址自动拉取OIDC元数据,但Steam不提供这个端点,所以必须手动指定authorization_endpoint等参数。
  • 关于id_token的注意点:Steam返回的不是标准JWT格式的id_token,而是一个OpenID断言。所以在回调页面,你需要手动解析URL中的openid.identity参数——它的格式是https://steamcommunity.com/openid/id/[你的SteamID],截取最后一段就是用户的SteamID。

额外必做的步骤

  1. 服务端验证断言:拿到SteamID后,不能直接信任,必须在服务端向https://steamcommunity.com/openid/login发送验证请求,带上回调返回的所有openid.*参数,并且加上openid.mode=check_authentication。如果返回的is_valid字段为true,才说明认证有效。
  2. 获取用户信息:用拿到的SteamID,结合你的Steam API Key,调用ISteamUser/GetPlayerSummaries接口,就能获取用户的昵称、头像等信息。

如果觉得用oidc-client-js适配太麻烦,其实Steam OpenID的流程本身很简单,你也可以手动实现跳转和回调逻辑,反而更省心。

内容的提问来源于stack exchange,提问作者Sergiu

火山引擎 最新活动