当且仅当用户在发出OAuth2请求时登录到LinkedIn时才能正常工作。
如果用户未登录,则会遇到错误。
我们的行动顺序:
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设置,等待我们的请求之前等等。
我们正在向Zotonic [1]添加LinkedIn OAuth2身份验证,但现在仍然使用非工作模块。
修改
有人提到LinkedIn的两个讨论。他的答复现在遗憾地从下面的讨论中消失了。
这些是链接:
https://developer.linkedin.com/forum/unable-verify-access-token
我在这些讨论中尝试了所有建议,但无济于事。
编辑#2:
检查LinkedIn上的第一个讨论表明,我不是唯一一个遇到这些一致性问题的人。如果用户已经清除了cookie或者在OAuth“舞蹈”期间必须登录LinkedIn,那么LinkedIn的某些内容就会出错https://developer.linkedin.com/forum/unable-verify-access-token#comment-36950
更新
解决了,感谢Matthijs Bierman,请看下面的答案。
答案 0 :(得分:20)
对我而言,https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=[accessToken]无效。
添加reguest标题
授权:持票人[accessToken]
直到我在sdk中进行链接测试并发现它们还要求您添加请求标题
之后才能正常工作x-li-src:msdk
使用这两个标题,调用https://api.linkedin.com/v1/people/~?format=json起作用。
希望Linkedin很快修复这个无证件的要求......
答案 1 :(得分:6)
我们通过电话交谈,结果发现您遇到与here相同的问题。 LinkedIn不接受Authentication
标头,并且需要一个请求参数:oauth2_access_token
。
答案 2 :(得分:5)
AccessToken给出此错误:
使用网络 OAuth 2.0 协议生成的accessToken不会遇到任何问题。当后端使用accessToken来获取用户详细信息时,仅在移动(iOS / Android)SDK上会出现此问题。
解决方案:在下面提供2个标题
例如:
网址: https://api.linkedin.com/v1/people/~?format=json
标题:
Authorization: Bearer AQVYqTNB3bFRAIatBcp4hM1r-......
x-li-src: msdk
注意:
如果AccessToken是使用OAuth 2.0生成的,则可以通过删除第二个标头(x-li-src)使用与上述相同的api。
答案 3 :(得分:2)
在Matthijs Bierman的帮助下,我们找到了解决问题的方法。
我们使用Authorization: Bearer ....
标头进行了身份验证。
如果我们使用oauth2_access_token
查询参数,那么它可以在有和没有登录LinkedIn用户的用例中工作。
结论:请勿使用授权标头,而是使用 oauth2_access_token 查询参数。
答案 4 :(得分:2)
同样在这里,每当我获得新的access_token时,我必须等待几分钟直到它有效。这是不可接受的。
我看了一下不同网站如何使用LinkedIn进行SignIn,这是一个适合我的解决方案。
交换AUTH_CODE以获取ACCESS_TOKEN时使用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集成示例: https://github.com/rgrebski/samples/tree/master/grails-linkedin-integration
答案 5 :(得分:1)
我看到了同样的问题;但是,查询参数对我不起作用。
它的特点是描述的问题: 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
}
答案 6 :(得分:1)
我尝试了以上所有解决方案,但没有与我合作。我改变了我的网址
https://www.linkedin.com/oauth/v2/
到
https://www.linkedin.com/uas/oauth2/
它运作正常。
答案 7 :(得分:0)
LinkedIn.com上用户的身份验证状态(无论他们是否已登录)对有效的OAuth访问令牌没有影响。换句话说,用户可以退出LinkedIn.com,该令牌应该仍然有效,直到它被撤销或过期。
您是否有可能生成新令牌?这会使前一个无效。您已共享的错误消息通常是在刷新令牌并且您使用之前的令牌进行API调用时引起的
答案 8 :(得分:0)
以上都不适合我。任何人都知道是否有解决方案? 有时它的工作,有时不会没有任何代码更改。
答案 9 :(得分:0)
https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=<token>
默认情况下,它以XML格式返回响应,添加format=json
。