如何在RestSharp的OAuth2令牌请求中正确添加Scope参数
问题
我尝试使用RestSharp通过client_credentials认证方式向指定端点获取令牌,指定了Scope,但返回的令牌Scope不正确,后续调用因权限不足失败。用Postman的OAuth2认证请求能获取到正确Scope的令牌,但按如下代码实现时返回的令牌不符合预期,请问我是否操作有误?
var client = new RestClient(_tokenEndpoint); var request = new RestRequest(Method.POST); request.AddParameter("client_id", _clientId); request.AddParameter("client_secret", _clientSecret); request.AddParameter("grant_type", "client_credentials"); request.AddParameter("Scope", "rxpclient-arsenal-ms.write",ParameterType.GetOrPost); IRestResponse<TokenResponse> response = client.Execute<TokenResponse>(request);
解决思路
- 参数名大小写是核心问题:OAuth2标准里
scope参数要求全小写,你代码里用了大写开头的Scope,认证服务器识别不了这个参数,就返回了默认范围的令牌。而Postman的OAuth2会自动用标准的小写参数名,所以能拿到正确结果。把参数名改成scope就行。 - 参数类型可以简化:POST表单请求下,RestSharp的
AddParameter默认就是GetOrPost类型,完全可以省略最后一个参数,代码更简洁。
修正后的代码:
var client = new RestClient(_tokenEndpoint); var request = new RestRequest(Method.POST); request.AddParameter("client_id", _clientId); request.AddParameter("client_secret", _clientSecret); request.AddParameter("grant_type", "client_credentials"); // 改为标准小写的scope参数名 request.AddParameter("scope", "rxpclient-arsenal-ms.write"); IRestResponse<TokenResponse> response = client.Execute<TokenResponse>(request);
如果改完还是有问题,建议:
- 核对
_tokenEndpoint和Postman用的地址完全一致,包括域名、路径,别打错字 - 检查
_clientId和_clientSecret是否和Postman里的配置完全相同,没有拼写或大小写错误
内容的提问来源于stack exchange,提问作者Illuminae
相关产品推荐
相关产品推荐

