Steam OpenID签名无效InternalOpenIDError问题求助
针对你遇到的问题——2017年正常运行的Steam认证,2019年重启后出现InternalOpenIDError: Failed to verify assertion(签名无效),我整理了几个大概率的排查方向,你可以一步步验证:
检查passport-steam版本是否过时
Steam在2018-2019年间更新了OpenID的签名算法(从SHA1切换到SHA256),旧版本的passport-steam库不支持新算法,会直接导致签名验证失败。先查看当前版本:npm list passport-steam如果版本低于1.0.0(或者比较老的版本),立即升级到最新稳定版:
npm update passport-steam确认服务器时间是否同步
OpenID签名验证对系统时间的准确性要求很高,如果你的服务器时间和Steam服务器时间偏差超过5分钟,就会触发签名无效错误。执行date命令查看本地时间,对比网络标准时间,偏差大的话配置NTP服务同步时间。核对Steam开发者后台的回调URL
重启项目后如果域名、协议(HTTP/HTTPS)或端口有变更,一定要同步更新Steam开发者后台的回调URL,必须保证和代码中Passport配置的回调地址完全一致(包括斜杠、大小写)。比如你代码里的回调路径是/auth/steam/return,后台里也得填一模一样的完整地址(比如https://yourdomain.com/auth/steam/return)。检查Session配置是否正常
重启后如果Session的存储方式(比如从内存换成Redis)或密钥(secret)被修改,会导致Passport无法正确获取认证请求的上下文状态,进而引发签名验证失败。确认你的express-session配置中,secret和重启前一致,Session存储服务(如Redis)运行正常。排查反向代理/负载均衡的配置
如果项目重启后新增了反向代理(比如Nginx),需要确保代理正确传递原始请求的协议和主机头。在Nginx配置中添加:proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host;同时在Express项目中开启信任代理:
app.set('trust proxy', true);否则Passport生成的回调URL会使用代理内部的地址,和Steam后台配置的不一致,导致签名验证失败。
先从升级passport-steam开始排查,这是这类问题最常见的解决办法,要是升级后还没解决,再依次检查其他项。
内容的提问来源于stack exchange,提问作者Alejandro Vales




