LinkedIn OAuth2:“;无法验证访问令牌";

LinkedIn OAuth2:“;无法验证访问令牌";,oauth,oauth-2.0,linkedin,Oauth,Oauth 2.0,Linkedin,当且仅当用户在发出OAuth2请求时登录到LinkedIn时,它才起作用 如果用户未登录,则会遇到错误 我们的行动顺序: 已成功获取新的访问令牌 使用访问令牌,发布到api端点https://api.linkedin.com/v1/people/\~ 在此之后,我们将收到包含以下内容的401: { "errorCode": 0, "message": "Unable to verify access token", "requestId": "C0DUCX81SA", "st

当且仅当用户在发出OAuth2请求时登录到LinkedIn时,它才起作用

如果用户未登录,则会遇到错误

我们的行动顺序:

  • 已成功获取新的访问令牌
  • 使用访问令牌,发布到api端点
    https://api.linkedin.com/v1/people/\~
在此之后,我们将收到包含以下内容的401:

{
  "errorCode": 0,
  "message": "Unable to verify access token",
  "requestId": "C0DUCX81SA",
  "status": 401,
  "timestamp": 1421946470523
}
有时,经过一段时间后,使用相同的访问令牌重试会得到200。有时候不是

如果用户在此“401期间”登录到LinkedIn,那么之前获取的访问令牌将神奇地开始工作

我不知道如何解决这个问题,因为这似乎是LinkedIn的一个问题

有没有人有任何建议,或者以前有没有人见过这种行为

我们尝试了cookie设置、请求前的等待时间等

我们正在将LinkedIn OAuth2身份验证添加到Zotonic[1],但现在被一个无法工作的模块卡住了

[1]

编辑:

有人提到了LinkedIn的两次讨论。他的回答现在遗憾地从下面的讨论中消失了

以下是链接:

在这些讨论中,我尝试了所有的建议,但都无济于事

编辑#2:

查看LinkedIn的第一次讨论表明,我不是唯一一个有这些一致性问题的人。如果用户在OAuth“舞蹈”期间清除了Cookie或必须登录LinkedIn,LinkedIn就会出现问题

更新


多亏Matthijs Bierman,问题得以解决,请参见下面的答案。

LinkedIn.com上用户的身份验证状态(无论他们是否登录)对有效的OAuth访问令牌没有影响。换句话说,用户可以注销LinkedIn.com,并且该令牌在被撤销或过期之前应该仍然有效


您是否有可能正在生成新令牌?这将使前一个无效。您共享的错误消息通常是在令牌被刷新并且您正在使用之前的令牌进行API调用时产生的,我们在电话中讨论过,结果表明您遇到了与之前相同的问题。LinkedIn不接受
身份验证
头,需要一个请求参数:
oauth2\u访问\u令牌

在Matthijs Bierman的帮助下,我们找到了解决问题的方法

我们使用
授权:承载人..
头进行身份验证。 如果我们使用
oauth2\u access\u token
query参数,那么它在有或没有登录LinkedIn用户的情况下都可以工作


结论:不要使用授权头,而是使用oauth2\u access\u令牌查询参数。

我看到了同样的问题;但是,查询参数对我不起作用

其特点与所述问题相同: 1) 我有一个有效的代币 2) 用户已从linkedin注销 3) 请求用户配置文件失败 4) 等五分钟,它就成功了

您可以在下面看到我的请求/响应:

$ curl -v  "https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=$LI_AT"
* Hostname was NOT found in DNS cache
*   Trying 108.174.10.12...
* Connected to api.linkedin.com (108.174.10.12) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
* Server certificate: tablet.linkedin.com
* Server certificate: DigiCert SHA2 Secure Server CA
* Server certificate: DigiCert Global Root CA
> GET /v1/people/~?format=json&oauth2_access_token=[**obscurred for security sake**] HTTP/1.1
> User-Agent: curl/7.37.1
> Host: api.linkedin.com
> Accept: */*
> 
< HTTP/1.1 401 Unauthorized
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< x-li-request-id: LZ2X5Y9DCC
< Date: Thu, 20 Aug 2015 16:12:52 GMT
< Vary: *
< x-li-format: json
< Content-Type: application/json;charset=UTF-8
< Content-Length: 142
< X-Li-Fabric: prod-ltx1
< Connection: keep-alive
< X-Li-Pop: prod-lva1
< X-LI-UUID: lS7xYKc3/BNAj0nmNSsAAA==
< Set-Cookie: lidc="b=TB76:g=111:u=47:i=1440087172:t=1440094069:s=AQHPHzjyg93X3bnT8KuNvThuwQo5buSS"; Expires=Thu, 20 Aug 2015 18:07:49 GMT; domain=.linkedin.com; Path=/
< 
{
  "errorCode": 0,
  "message": "Unable to verify access token",
  "requestId": "LZ2X5Y9DCC",
  "status": 401,
  "timestamp": 1440087172914
* Connection #0 to host api.linkedin.com left intact
}
$curl-v”https://api.linkedin.com/v1/people/~?format=json&oauth2\u访问\u令牌=$LI\u AT“
*在DNS缓存中找不到主机名
*正在尝试108.174.10.12。。。
*已连接到api.linkedin.com(108.174.10.12)端口443(#0)
*使用TLS_ECDHE_RSA_和_AES_128_CBC_SHA256的TLS 1.2连接
*服务器证书:table.linkedin.com
*服务器证书:DigiCert SHA2安全服务器CA
*服务器证书:DigiCert全局根CA
>GET/v1/people/~?format=json&oauth2\u access\u token=[**obscured for security**]HTTP/1.1
>用户代理:curl/7.37.1
>主持人:api.linkedin.com
>接受:*/*
> 
对我来说,这个方法不起作用

添加reguest头

授权:持票人[accessToken]

直到我检查了sdk中的linked并进行了测试,发现它们还需要您添加请求头,我才开始工作

x-li-src:msdk

有了这两个标题,调用就成功了


希望Linkedin能尽快修复这个未记录的要求…

这里也是一样,每次我获得新的访问令牌时,我都要等待几分钟,直到它生效。这是不能接受的

我看了一下不同的网站是如何与LinkedIn进行登录的,这里有一个适合我的解决方案

为了获取访问令牌而交换身份验证代码时,请使用get方法而不是POST,例如:

GET https://www.linkedin.com/oauth/v2/accessToken?client_id=yourClientId&client_secret=yourClientSecret&grant_type=authorization_code&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2FlinkedInLogin&code=AQQGx11-p1uaQWz2YBWHBcskaGrVrEDeFUo4O2vjolFaKaQ89UhGlR27_yDACNLoxDmYi7AR5sCplwsHLD_ERAVsscFozo-qRl032aFnj2UcUoPjCfo
Grails与LinkedIn OAuth2的集成示例:

我尝试了上述所有解决方案,但都不奏效。我将我的url从

https://www.linkedin.com/oauth/v2/ 


它工作正常

以上这些都不适合我。有人知道有没有解决办法?
有时它可以工作,有时不需要任何代码更改。

https://api.linkedin.com/v1/people/~?format=json&oauth2\u访问\u令牌=


默认情况下,它是XML格式的返回响应,从mobile SDK添加
format=json

AccessToken会出现以下错误:

使用webOAuth 2.0协议生成的AccessToken不会有任何问题。只有当accessToken
https://www.linkedin.com/uas/oauth2/
Authorization: Bearer AQVYqTNB3bFRAIatBcp4hM1r-......

x-li-src:  msdk