C# Restsharp oAuth 2腿身份验证错误:签名方法HMAC-SHA1的签名无效
我们正在使用一个支持OAuth 2段式身份验证的API。在尝试运行rest sharp客户端OAuth1Authenticator实现时,出现以下错误: 消息:HTTP状态401-签名方法HMAC-SHA1的签名无效 说明:此请求需要HTTP身份验证(无效) 签名方法HMAC-SHA1)的签名 下面是代码片段:C# Restsharp oAuth 2腿身份验证错误:签名方法HMAC-SHA1的签名无效,c#,security,oauth,restsharp,C#,Security,Oauth,Restsharp,我们正在使用一个支持OAuth 2段式身份验证的API。在尝试运行rest sharp客户端OAuth1Authenticator实现时,出现以下错误: 消息:HTTP状态401-签名方法HMAC-SHA1的签名无效 说明:此请求需要HTTP身份验证(无效) 签名方法HMAC-SHA1)的签名 下面是代码片段: var restClient = new RestClient(baseUrl); restClient.Authenticator =
var restClient = new RestClient(baseUrl);
restClient.Authenticator =
OAuth1Authenticator.ForProtectedResource(ConfigurationManager.AppSettings["ConsumerKey"],
ConfigurationManager.AppSettings["ConsumerSecret"], string.Empty, string.Empty);
var request = new RestRequest(relativePath);
request.AddParameter(new Parameter { Name = "username", Value = username, Type = ParameterType.QueryString });
request.AddParameter(new Parameter { Name = "firstname", Value = firstname, Type = ParameterType.QueryString });
request.AddParameter(new Parameter { Name = "surname", Value = surname, Type = ParameterType.QueryString });
request.AddParameter(new Parameter { Name = "email", Value = email, Type = ParameterType.QueryString });
request.AddParameter(new Parameter { Name = "password", Value = password, Type = ParameterType.QueryString });
request.Resource = string.Format(relativePath);
request.Method = Method.POST;
var response = restClient.Execute<object>(request);
var restClient=新的restClient(baseUrl);
restClient.Authenticator=
OAuth1Authenticator.ForProtectedResource(ConfigurationManager.AppSettings[“ConsumerKey”],
ConfigurationManager.AppSettings[“ConsumerCret”],string.Empty,string.Empty);
var请求=新的重新请求(相对路径);
AddParameter(新参数{Name=“username”,Value=username,Type=ParameterType.QueryString});
AddParameter(新参数{Name=“firstname”,Value=firstname,Type=ParameterType.QueryString});
AddParameter(新参数{Name=“姓氏”,值=姓氏,类型=ParameterType.QueryString});
AddParameter(新参数{Name=“email”,Value=email,Type=ParameterType.QueryString});
AddParameter(新参数{Name=“password”,Value=password,Type=ParameterType.QueryString});
request.Resource=string.Format(relativePath);
request.Method=Method.POST;
var response=restClient.Execute(请求);
在我看来,我们需要在请求时传递签名。但我还没有弄明白如何使用RestSharp通过这个测试
有人能给我指一下正确的方向吗
更新
有趣的是,当我使用下面的自定义OAuthBase类对请求进行签名时。它工作得很好。
我真的很想在不编写任何自定义代码的情况下使用RestSharp。不确定我到底做错了什么。您正在为您的访问令牌和访问令牌密码传递空字符串
restClient.Authenticator =
OAuth1Authenticator.ForProtectedResource(ConfigurationManager.AppSettings["ConsumerKey"],
ConfigurationManager.AppSettings["ConsumerSecret"], string.Empty, string.Empty);
查看一个表,可以确保提供了值。尝试将该站点用作模板,并查看填充这些值是否有帮助。您正在为访问令牌和访问令牌密码传递空字符串
restClient.Authenticator =
OAuth1Authenticator.ForProtectedResource(ConfigurationManager.AppSettings["ConsumerKey"],
ConfigurationManager.AppSettings["ConsumerSecret"], string.Empty, string.Empty);
查看一个表,可以确保提供了值。尝试将该站点用作模板,看看填充这些值是否有帮助。这看起来很有趣,但要点是签名不匹配,因为服务器和客户端使用不同的哈希机制。请查看您的链接,但我无法说明此重拾问题。谢谢。你看过第一条评论了吗?要点是检查服务器和客户端的签名是否使用相同的问题这里的问题是我无法发送签名。我只有使用者密钥和秘密密钥。不确定如何使用REST传递签名此链接有帮助吗?这看起来让drupal很感兴趣,但要点是签名不匹配,因为服务器和客户端使用不同的哈希机制。请看一下您的链接,但我无法将此重拾问题联系起来。谢谢。你看过第一条评论了吗?要点是检查服务器和客户端的签名是否使用相同的问题这里的问题是我无法发送签名。我只有使用者密钥和秘密密钥。不确定如何使用REST传递签名此链接有帮助吗?我们的提供商不提供这些额外的参数。根据我上次的更新,OAuthBase.cs会为其他两个方法传递空值。我们的提供程序不提供这些额外的参数。根据我上次的更新,OAuthBase.cs将为其他两个方法传递空值。