Bluesky OAuth流程调用atproto.RepoCreateRecord()报InvalidToken: Bad token scope错误求助
看起来你已经顺利走完了OAuth授权的大部分流程——能跳转至Bluesky完成账号授权、回调后成功解析token,却卡在调用atproto.RepoCreateRecord()这一步,核心问题应该是获取token时请求的权限范围不足。
Bluesky的RepoCreateRecord()接口需要repo.write这个写入权限,你可以按下面的步骤排查解决:
检查OAuth授权请求的
scope参数:
你发起授权跳转的URL里,是不是只传了repo.read这类只读权限?必须明确指定repo.write(如果需要多个权限,用空格分隔即可,比如repo.read repo.write)。示例授权URL应该类似:https://bsky.social/oauth/authorize?response_type=code&client_id=你的客户端ID&redirect_uri=你的回调地址&scope=repo.write验证token实际包含的权限:
你可以在回调逻辑里解码token的JWT payload(用JWT解码工具或者代码解析),查看scope字段是否包含repo.write。如果没有,说明授权时的scope设置未生效,需要重新发起带正确scope的授权请求。核对
bluesky-client-metadata.json配置:
虽然你提到已经正确返回这个文件,但还是要确认里面的scopes数组包含repo.write,示例配置如下:{ "clientName": "你的应用名称", "redirectUris": ["https://你的回调地址"], "scopes": ["repo.read", "repo.write"] }这个文件是Bluesky用来校验应用允许请求的权限范围,如果这里没添加
repo.write,哪怕授权请求里传了该权限也会被限制。
最后,记得重新走一遍完整的OAuth授权流程,确保新获取的token带有repo.write权限,再调用atproto.RepoCreateRecord()应该就能解决这个错误了。
备注:内容来源于stack exchange,提问作者Mark Fletcher

