Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无效/过期令牌-401-未经授权(需要授权)使用Spring.Social.Twitter_C#_Api_Twitter_Twitter Oauth_Spring Social Twitter - Fatal编程技术网

C# 无效/过期令牌-401-未经授权(需要授权)使用Spring.Social.Twitter

C# 无效/过期令牌-401-未经授权(需要授权)使用Spring.Social.Twitter,c#,api,twitter,twitter-oauth,spring-social-twitter,C#,Api,Twitter,Twitter Oauth,Spring Social Twitter,我将Spring.Net框架(Spring.rest、Spring.social.core和Spring.social.twitter(2.x-oauth 1.0a))与c#一起使用 应用程序的想法是针对一个事件,人们可以将他们的twitter帐户链接到该事件,并在收到该人的结果后将其发布到他们的twitter帐户。 它将由一个网站组成,用户将在其中注册并授予访问权限。然后是一个控制台应用程序,该应用程序将处理结果(使用保存的令牌集发布给注册用户)。 我有一个web mvc应用程序,它要求用户登

我将Spring.Net框架(Spring.rest、Spring.social.core和Spring.social.twitter(2.x-oauth 1.0a))与c#一起使用

应用程序的想法是针对一个事件,人们可以将他们的twitter帐户链接到该事件,并在收到该人的结果后将其发布到他们的twitter帐户。

它将由一个网站组成,用户将在其中注册并授予访问权限。然后是一个控制台应用程序,该应用程序将处理结果(使用保存的令牌集发布给注册用户)。

我有一个web mvc应用程序,它要求用户登录并授权一个应用程序,以便它可以代表用户发布。返回此信息(令牌等)已加密并保存在与用户链接的数据库中。例如,我们的网站-重定向到回调url-twitter-登录+权限-返回回调url-将令牌信息存储在加密数据库中

然后,我有一个控制台应用程序(最终是一个服务),当我们有一个与twitter帐户相关联的人的结果并授予了权限时,它会查看结果。我们使用这些信息发布到他们的帐户(他们的结果)

注册过程很好,我可以发帖子给注册人,说他们已经注册了。(网站)

控制台应用程序最初是为了能够发布结果

然而,我突然发现(我想这只是一个时间框架(大约一个小时)——他们注册后马上就开始工作了。)

“”的POST请求导致401-未经授权(需要授权)

链接到一个用户(在我们的系统中)-我加密并存储验证器(来自回调)、机密和值。然后我用它交换访问令牌,以获取机密和值,以便能够发布

目前,这只是一个概念验证的演示(将转至127.0.0.1)。 到目前为止,我们只在Spring.SocialFramework(c#)上尝试了所有这些

当它通过控制台应用程序工作时--RAW-

大约一小时后(本例中为几个小时),相同的代码将失败…需要HTTP/1.1 401授权-无效/过期令牌

REQUEST
POST https://api.twitter.com/oauth/access_token HTTP/1.1
Accept: application/x-www-form-urlencoded,multipart/form-data,*/*
Authorization: OAuth oauth_consumer_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
, oauth_signature_method="HMAC-SHA1"
, oauth_timestamp="1417018992"
, oauth_nonce="2294192392"
, oauth_version="1.0"
, oauth_token="yyyyyyyyyyyyyyyyyyyyyyyyyyy"
, oauth_verifier="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
, oauth_signature="vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
Content-Type: application/x-www-form-urlencoded
Host: api.twitter.com
Content-Length: 0
Connection: Keep-Alive

RESPONSE
HTTP/1.1 401 Authorization Required
cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
content-length: 136
content-security-policy: default-src https:; connect-src https:; font-src https: data:; frame-src https:; img-src https: data:; media-src https:; object-src https:; script-src 'unsafe-inline' 'unsafe-eval' https:; style-src 'unsafe-inline' https:; report-uri https://twitter.com/i/csp_report?a=NVXW433SMFUWY%3D%3D%3D&ro=false;
content-type: text/html; charset=utf-8
date: Wed, 26 Nov 2014 16:23:13 UTC
expires: Tue, 31 Mar 1981 05:00:00 GMT
last-modified: Wed, 26 Nov 2014 16:23:13 GMT
pragma: no-cache
server: tsa_b
set-cookie: _twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCEzs6exJAToHaWQiJWI5MDgzMzk0Y2FhMGY2%250AMGNlNmEyYzQzZjk5OGEyNjAyIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--86562a75e3ddabab3c688e726e6c42fe37a067ea; domain=.twitter.com; path=/; secure; HttpOnly
set-cookie: guest_id=v1%3A141701899357688419; Domain=.twitter.com; Path=/; Expires=Fri, 25-Nov-2016 16:23:13 UTC
status: 401 Unauthorized
strict-transport-security: max-age=631138519
vary: Accept-Encoding
www-authenticate: OAuth realm="https://api.twitter.com"
x-connection-hash: 24d849ec3bead25133b581794d34c74f
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-mid: aed281dc4b2e3fb483737ccd772ce1d8d3f6064d
x-transaction: d41ff14981c7a0ec
x-ua-compatible: IE=edge,chrome=1
x-xss-protection: 1; mode=block

<?xml version="1.0" encoding="UTF-8"?>
<hash>
  <error>Invalid / expired Token</error>
  <request>/oauth/access_token</request>
</hash>
请求
邮递https://api.twitter.com/oauth/access_token HTTP/1.1
接受:应用程序/x-www-form-urlencoded,多部分/表单数据*/*
授权:OAuth OAuth_consumer_key=“XXXXXXXXXXXXXXXXXXXXXXXX”
,oauth_signature_method=“HMAC-SHA1”
,oauth_timestamp=“1417018992”
,oauth_nonce=“2294192392”
,oauth_version=“1.0”
,oauth_token=“yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy”
,oauth_verifier=“zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
,oauth_signature=“vvvvvvvvvvvv”
内容类型:application/x-www-form-urlencoded
主持人:api.twitter.com
内容长度:0
连接:保持活力
回答
需要HTTP/1.1 401授权
缓存控制:无缓存,无存储,必须重新验证,预检查=0,后检查=0
内容长度:136
内容安全策略:默认src https:;连接src https:;字体src https:数据:;框架src https:;img src https:数据:;媒体src https:;对象src https:;脚本src“不安全内联”不安全评估“https:;样式src“不安全内联”https:;报告urihttps://twitter.com/i/csp_report?a=NVXW433SMFUWY%3D%3D%3D&ro=false;
内容类型:text/html;字符集=utf-8
日期:2014年11月26日星期三16:23:13 UTC
到期时间:1981年3月31日星期二格林尼治标准时间05:00:00
最后修改:2014年11月26日星期三16:23:13 GMT
pragma:没有缓存
伺服器:tsa_b
设置cookie:_twitter_sess=bah7cdopy3jlyxrlzf9hdgwreczs6exjatohawqijwi5mdgzmzk0y2fhmgy2%250amgnlnmeyyzqzzjk5ogeynjayigpgfzaeldoidby3rpb25db250cm9sbgvy%250aojpgbgfzado6rmc2hiyxnoewagogpadxnlzhsa-86562a75edababa3c688e726c4c22f7e67ea;域=.a0.twitter.com;路径=/;安全;HttpOnly
设置cookie:guest_id=v1%3A141701899357688419;Domain=.twitter.com;Path=/;Expires=Fri,2016年11月25日16:23:13 UTC
状态:401未经授权
严格的交通安全:最大年龄=631138519
改变:接受编码
www-authenticate:OAuth-realm=”https://api.twitter.com"
x-connection-hash:24d849ec3bead25133b581794d34c74f
x-content-type-options:nosniff
x-frame-options:SAMEORIGIN
x-mid:AED281DC4B2E3FB4837CCD772CE1D8D3F6064D
x交易:d41ff14981c7a0ec
x-ua-兼容:IE=edge,chrome=1
x-xss-保护:1;模式=块
无效/过期令牌
/oauth/access\u令牌
一旦他们从服务或控制台应用程序向我们授予了权限,有人能帮助或建议我应该坚持什么才能代表用户发布吗


提前感谢。

我设法解决了这个问题。我从等式中删除了Spring.Social,并编写了一些快速代码,在没有框架的情况下与Twitter API对话,这让我更好地理解了步骤和过程

使用这个,我重新添加了这个框架,我想我现在正确地使用了它,因为它一切正常

我的问题是,一旦我得到我的请求令牌+验证器-提供回调、消费者等,我就用它来获得一个访问令牌来执行POST等

然而,每次我试图发布时,我都试图交换请求令牌值+机密和验证器来获取访问令牌。这最终失败了

我更改了代码以保存返回的访问令牌,并直接使用它,现在可以正常工作了

REQUEST
POST https://api.twitter.com/oauth/access_token HTTP/1.1
Accept: application/x-www-form-urlencoded,multipart/form-data,*/*
Authorization: OAuth oauth_consumer_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
, oauth_signature_method="HMAC-SHA1"
, oauth_timestamp="1417018992"
, oauth_nonce="2294192392"
, oauth_version="1.0"
, oauth_token="yyyyyyyyyyyyyyyyyyyyyyyyyyy"
, oauth_verifier="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
, oauth_signature="vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
Content-Type: application/x-www-form-urlencoded
Host: api.twitter.com
Content-Length: 0
Connection: Keep-Alive

RESPONSE
HTTP/1.1 401 Authorization Required
cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
content-length: 136
content-security-policy: default-src https:; connect-src https:; font-src https: data:; frame-src https:; img-src https: data:; media-src https:; object-src https:; script-src 'unsafe-inline' 'unsafe-eval' https:; style-src 'unsafe-inline' https:; report-uri https://twitter.com/i/csp_report?a=NVXW433SMFUWY%3D%3D%3D&ro=false;
content-type: text/html; charset=utf-8
date: Wed, 26 Nov 2014 16:23:13 UTC
expires: Tue, 31 Mar 1981 05:00:00 GMT
last-modified: Wed, 26 Nov 2014 16:23:13 GMT
pragma: no-cache
server: tsa_b
set-cookie: _twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCEzs6exJAToHaWQiJWI5MDgzMzk0Y2FhMGY2%250AMGNlNmEyYzQzZjk5OGEyNjAyIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--86562a75e3ddabab3c688e726e6c42fe37a067ea; domain=.twitter.com; path=/; secure; HttpOnly
set-cookie: guest_id=v1%3A141701899357688419; Domain=.twitter.com; Path=/; Expires=Fri, 25-Nov-2016 16:23:13 UTC
status: 401 Unauthorized
strict-transport-security: max-age=631138519
vary: Accept-Encoding
www-authenticate: OAuth realm="https://api.twitter.com"
x-connection-hash: 24d849ec3bead25133b581794d34c74f
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-mid: aed281dc4b2e3fb483737ccd772ce1d8d3f6064d
x-transaction: d41ff14981c7a0ec
x-ua-compatible: IE=edge,chrome=1
x-xss-protection: 1; mode=block

<?xml version="1.0" encoding="UTF-8"?>
<hash>
  <error>Invalid / expired Token</error>
  <request>/oauth/access_token</request>
</hash>