领英 OAuth2:"Unable to verify access token"
LinkedIn OAuth2: "Unable to verify access token"
当且仅当用户在发出 OAuth2 请求时登录到 LinkedIn。它有效。
如果用户未登录,则会遇到错误。
我们的行动顺序:
- 成功获取新的访问令牌
- 使用访问令牌,post 到 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 设置、请求前的等待时间等
我们正在向 Zotonic [1] 添加 LinkedIn OAuth2 身份验证,但现在遇到了一个无法正常工作的模块。
编辑:
有人提到了 LinkedIn 上的两个讨论。遗憾的是,他的回复现在从下面的讨论中消失了。
这些是链接:
https://developer.linkedin.com/forum/unable-verify-access-token
我已经尝试了这些讨论中的所有建议,但无济于事。
编辑#2:
查看 LinkedIn 上的第一个讨论表明我不是唯一遇到这些一致性问题的人。如果用户在 OAuth "dance" https://developer.linkedin.com/forum/unable-verify-access-token#comment-36950
期间清除了 cookie 或必须登录 LinkedIn,LinkedIn 就会出现问题
更新
已解决,感谢 Matthijs Bierman,请参阅下面的答案。
用户在 LinkedIn.com 上的身份验证状态(无论他们是否登录)不会影响有效的 OAuth 访问令牌。换句话说,用户可以注销 LinkedIn.com 并且该令牌应该仍然有效,直到它被撤销或过期。
您是否有可能生成新令牌?这将使前一个无效。您分享的错误消息通常是在令牌已刷新并且您正在使用前一个令牌
进行 API 调用时引起的
我们在 phone 上讨论过,结果你 运行 遇到了与 here 相同的问题。 LinkedIn 不接受 Authentication
header 并且需要一个请求参数:oauth2_access_token
.
在 Matthijs Bierman 的帮助下,我们找到了解决问题的办法。
我们使用 Authorization: Bearer ....
header 进行了身份验证。
如果我们改用 oauth2_access_token
查询参数,那么它在有和没有 signed-in LinkedIn 用户的情况下都有效。
结论:不要使用 Authorization header 而是使用 oauth2_access_token 查询参数。
我遇到了同样的问题;但是,查询参数对我不起作用。
它的特征与问题描述的一样:
1)我有一个有效的令牌
2)用户登出linkedin
3)用户资料请求失败
4) 等待五分钟,成功
你可以在下面看到我的request/response:
$ 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
}
对我来说 https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=[accessToken] 没用。
添加请求 header
授权:Bearer [accessToken]
直到我通过 sdk 中的链接并测试并发现他们还要求您添加请求后才起作用header
x-li-src: msdk
有了这两个 header,呼叫 https://api.linkedin.com/v1/people/~?format=json 成功了。
希望 Linkedin 尽快解决这个未记录的要求...
这里也一样,每次我得到新的 access_token 我都得等几分钟直到它有效。这是不可接受的。
我查看了不同网站如何使用 LinkedIn 登录,这是一个对我有用的解决方案。
交换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
我尝试了以上所有解决方案,但没有成功。我将 url 从
更改为
https://www.linkedin.com/oauth/v2/
到
https://www.linkedin.com/uas/oauth2/
它工作正常。
None 以上对我有用。任何人都知道是否有解决方案?
有时它的工作,有时不是没有任何代码更改。
https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=<token>
默认情况下,return 响应 XML,添加 format=json
。
来自移动 SDK 的 AccessToken 给出此错误:
您不会遇到使用网络 OAuth 2.0 协议生成的 accessTokens 的任何问题。当 back-end 使用 accessToken 获取用户详细信息时,此问题仅发生在移动 (iOS/Android) SDK 中。
解决方案:提供以下2 headers
- 授权
- x-li-src(网页跳过)
例如:
Url:
https://api.linkedin.com/v1/people/~?format=json
Header(s):
Authorization: Bearer AQVYqTNB3bFRAIatBcp4hM1r-......
x-li-src: msdk
注:
如果 AccessToken 是使用 OAuth 2.0 生成的,您可以通过删除第二个 header(x-li-src) .[=34 来使用上述 api =]
当且仅当用户在发出 OAuth2 请求时登录到 LinkedIn。它有效。
如果用户未登录,则会遇到错误。
我们的行动顺序:
- 成功获取新的访问令牌
- 使用访问令牌,post 到 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 设置、请求前的等待时间等
我们正在向 Zotonic [1] 添加 LinkedIn OAuth2 身份验证,但现在遇到了一个无法正常工作的模块。
编辑:
有人提到了 LinkedIn 上的两个讨论。遗憾的是,他的回复现在从下面的讨论中消失了。
这些是链接:
https://developer.linkedin.com/forum/unable-verify-access-token
我已经尝试了这些讨论中的所有建议,但无济于事。
编辑#2:
查看 LinkedIn 上的第一个讨论表明我不是唯一遇到这些一致性问题的人。如果用户在 OAuth "dance" https://developer.linkedin.com/forum/unable-verify-access-token#comment-36950
期间清除了 cookie 或必须登录 LinkedIn,LinkedIn 就会出现问题更新
已解决,感谢 Matthijs Bierman,请参阅下面的答案。
用户在 LinkedIn.com 上的身份验证状态(无论他们是否登录)不会影响有效的 OAuth 访问令牌。换句话说,用户可以注销 LinkedIn.com 并且该令牌应该仍然有效,直到它被撤销或过期。
您是否有可能生成新令牌?这将使前一个无效。您分享的错误消息通常是在令牌已刷新并且您正在使用前一个令牌
进行 API 调用时引起的我们在 phone 上讨论过,结果你 运行 遇到了与 here 相同的问题。 LinkedIn 不接受 Authentication
header 并且需要一个请求参数:oauth2_access_token
.
在 Matthijs Bierman 的帮助下,我们找到了解决问题的办法。
我们使用 Authorization: Bearer ....
header 进行了身份验证。
如果我们改用 oauth2_access_token
查询参数,那么它在有和没有 signed-in LinkedIn 用户的情况下都有效。
结论:不要使用 Authorization header 而是使用 oauth2_access_token 查询参数。
我遇到了同样的问题;但是,查询参数对我不起作用。
它的特征与问题描述的一样: 1)我有一个有效的令牌 2)用户登出linkedin 3)用户资料请求失败 4) 等待五分钟,成功
你可以在下面看到我的request/response:
$ 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
}
对我来说 https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=[accessToken] 没用。
添加请求 header
授权:Bearer [accessToken]
直到我通过 sdk 中的链接并测试并发现他们还要求您添加请求后才起作用header
x-li-src: msdk
有了这两个 header,呼叫 https://api.linkedin.com/v1/people/~?format=json 成功了。
希望 Linkedin 尽快解决这个未记录的要求...
这里也一样,每次我得到新的 access_token 我都得等几分钟直到它有效。这是不可接受的。
我查看了不同网站如何使用 LinkedIn 登录,这是一个对我有用的解决方案。
交换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
我尝试了以上所有解决方案,但没有成功。我将 url 从
更改为https://www.linkedin.com/oauth/v2/
到
https://www.linkedin.com/uas/oauth2/
它工作正常。
None 以上对我有用。任何人都知道是否有解决方案? 有时它的工作,有时不是没有任何代码更改。
https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=<token>
默认情况下,return 响应 XML,添加 format=json
。
来自移动 SDK 的 AccessToken 给出此错误:
您不会遇到使用网络 OAuth 2.0 协议生成的 accessTokens 的任何问题。当 back-end 使用 accessToken 获取用户详细信息时,此问题仅发生在移动 (iOS/Android) SDK 中。
解决方案:提供以下2 headers
- 授权
- x-li-src(网页跳过)
例如:
Url: https://api.linkedin.com/v1/people/~?format=json
Header(s):
Authorization: Bearer AQVYqTNB3bFRAIatBcp4hM1r-......
x-li-src: msdk
注:
如果 AccessToken 是使用 OAuth 2.0 生成的,您可以通过删除第二个 header(x-li-src) .[=34 来使用上述 api =]