C# 调用 Twitter Auth 1.0 GET 接口获取私信附件返回未授权如何解决
Twitter私信附件接口调用未授权问题解决方案
- 修复OAuth参数拼写错误
代码中parameterString拼接时误将token参数写为oath_token,属于拼写错误,正确参数名为oauth_token,这是导致签名校验失败、返回未授权的最直接原因。 - 修正Nonce生成规则
当前你直接使用时间戳转Base64作为Nonce,不符合OAuth 1.0a协议要求:Nonce需要为每次请求唯一的随机字符串,用于防止重放攻击,可改为生成随机GUID后取字符串值作为Nonce。 - 校准签名生成逻辑
Twitter OAuth 1.0a要求参与签名的所有参数必须按key的字典序排序,URL编码需严格遵循RFC 3986规范(空格编码为
%20而非+,所有特殊字符必须编码)。你可以先将所有OAuth参数存入字典,排序后再拼接为parameterString,避免参数顺序错误导致签名校验失败。 - 调整OAuth参数传递方式
不推荐将OAuth参数直接拼接在请求URL的Query中,建议构造Authorization请求头传递OAuth参数,格式参考:
所有参数值需用双引号包裹。Authorization: OAuth oauth_consumer_key="你的consumerKey",oauth_token="你的accessToken",oauth_signature_method="HMAC-SHA1",oauth_timestamp="时间戳",oauth_nonce="随机串",oauth_version="1.0",oauth_signature="生成的签名" - 校验账号与令牌权限
- 确认你的Twitter开发者账号已申请开通私信读取相关权限,新版Twitter API需要手动申请
dm.read权限才能访问私信附件资源 - 确认你使用的Access Token为有效令牌,已获得用户的私信读取授权,未过期也未被平台吊销
- 确认你的Twitter开发者账号已申请开通私信读取相关权限,新版Twitter API需要手动申请
内容的提问来源于stack exchange,提问作者Mansi
相关产品推荐
相关产品推荐

