You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask项目实现Steam账号绑定已有用户的Steam ID获取方案咨询

Steam账号绑定功能实现方案

两种方案均可实现需求,可根据你的业务安全要求选择:

方案1:用户输入Steam用户名/个人资料链接获取ID

该方案实现成本最低,但仅能验证输入的Steam账号是否存在,无法证明当前操作的用户持有该账号,存在被恶意绑定他人账号的风险,适合对安全性要求极低的场景。
实现步骤:

  • 提前申请Steam Web API密钥
  • 前端提供输入框让用户提交Steam自定义用户名(个人资料URL /id/ 后的后缀)或完整的个人资料链接
  • 后端提取用户输入的自定义标识,调用ISteamUser/ResolveVanityURL接口传入标识和API密钥,即可获取对应的64位Steam ID
  • 再调用ISteamUser/GetPlayerSummaries接口拉取账号昵称、头像等公开信息,返回前端展示给用户确认
  • 用户确认后,将Steam ID与当前登录的本站账号关联存入数据库即可

方案2:通过Steam OpenID流程校验账号权属(推荐)

该方案可以100%验证当前操作的用户是Steam账号的持有者,安全性更高,和Steam直接登录本站的逻辑差异仅为拿到Steam ID后无需创建本站登录态,仅做账号关联即可,支持绑定多个Steam账号。

实现流程

  • 前端绑定页面放置「绑定Steam账号」按钮
  • 用户点击按钮后跳转至Steam的OpenID登录页,回调地址指定为你站点的绑定回调路由
  • 用户在Steam完成登录后会自动跳转回你的回调地址,回调请求会携带经过Steam验证的64位Steam ID
  • 拉取账号信息展示给用户确认后,即可将Steam ID与当前登录的本站账号绑定

最简Flask实现示例

先安装所需依赖:
pip install flask requests python-openid
核心代码参考:

from flask import Flask, redirect, request, session, render_template
import requests
import urllib.parse

# 配置参数
STEAM_API_KEY = "你申请的Steam Web API密钥"
STEAM_OPENID_ENDPOINT = "https://steamcommunity.com/openid/login"
app = Flask(__name__)
app.secret_key = "你的Flask会话加密密钥"

# 绑定页面,需先校验用户已登录本站
@app.route("/bind-steam")
def bind_page():
    if not session.get("site_user_id"):
        return redirect("/your-site-login-page")
    return render_template("bind_steam.html")

# 发起Steam绑定请求
@app.route("/steam/bind/start")
def start_bind():
    if not session.get("site_user_id"):
        return redirect("/your-site-login-page")
    # 构造OpenID请求参数
    openid_params = {
        "openid.ns": "http://specs.openid.net/auth/2.0",
        "openid.mode": "checkid_setup",
        "openid.return_to": f"{request.host_url}steam/bind/callback",
        "openid.realm": request.host_url,
        "openid.identity": "http://specs.openid.net/auth/2.0/identifier_select",
        "openid.claimed_id": "http://specs.openid.net/auth/2.0/identifier_select"
    }
    return redirect(f"{STEAM_OPENID_ENDPOINT}?{urllib.parse.urlencode(openid_params)}")

# Steam回调处理
@app.route("/steam/bind/callback")
def bind_callback():
    if not session.get("site_user_id"):
        return redirect("/your-site-login-page")
    # 提取Steam ID
    claimed_id = request.args.get("openid.claimed_id")
    if not claimed_id:
        return "绑定失败,请重试"
    steam_id = claimed_id.split("/")[-1]
    # 拉取账号信息用于展示确认
    player_resp = requests.get(
        "https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/",
        params={"key": STEAM_API_KEY, "steamids": steam_id}
    )
    player_info = player_resp.json()["response"]["players"][0]
    # 展示确认页面或直接执行绑定逻辑,数据库将site_user_id和steam_id做关联即可
    # 如需支持多账号绑定,只需将用户和SteamID的关联关系设为一对多即可
    return f"绑定成功,你绑定的Steam账号:{player_info['personaname']},SteamID:{steam_id}"

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:06:03