LinkedIn领英官方API接口文档说明:授权代码流程

@高效码农  July 4, 2019

授权代码流程包括以下步骤:

  • 1.配置应用程序以获取客户端ID和客户端密钥。
  • 2.您的应用程序将浏览器定向到LinkedIn的OAuth 2.0授权页面,其中该成员进行身份验证。身份验证后,LinkedIn的授权服务器将授权代码传递给您的应用程序。
  • 3.您的应用程序将此代码发送到LinkedIn,LinkedIn返回访问令牌。
  • 4.您的应用程序使用此令牌代表该成员调用API。

第1步:配置您的应用程序

如果您刚刚开始,请创建一个新的应用程序

如果您有现有应用程序,请选择它以修改其设置。

选择应用程序后,单击导航中的“Auth”链接以查看应用程序的凭据并配置服务器的回调URL。为了确保安全的身份验证过程并防止欺诈性交易,LinkedIn仅与您已识别为受信任的URL进行通信。

备注
网址必须是绝对的。例如https://example.com/auth/callback,不是/auth/callback。
URL参数被忽略。例如,https://example.com/?id=1 与...相同 https://example.com/
网址不能包含#。例如,https://example.com/auth/callback#linkedin无效
重定向网址

2019-07-03T07:23:31.png
每个应用程序都分配有唯一的客户端ID(也称为使用者密钥或API密钥)和客户端密钥。记下这些值,因为它们必须集成到配置文件或应用程序的实际代码中。

OAuth值

重要
您的客户端密钥保护您的应用程序的安全性,因此请务必确保其安全!不要与任何人分享您的客户秘密价值,包括将其发布在支持论坛以获取有关您的应用程序的帮助。

第2步:申请授权码

要申请授权代码,您必须将会员的浏览器定向到LinkedIn的OAuth 2.0授权页面,其中该成员接受或拒绝您的应用程序的权限请求。

请求完成后,会出现以下情况之一:

  • 如果该成员之前未接受该应用程序的权限请求,或者该成员已过期或已被该成员手动撤销,则浏览器将重定向到LinkedIn的授权屏幕,如下面的屏幕截图所示。成员完成授权过程后,浏览器将重定向到redirect_uri查询参数中提供的URL 。
  • 如果成员存在有效的现有权限授予,则会绕过授权屏幕,并立即将成员重定向到redirect_uri查询参数中提供的URL 。

请注意,如果您更改了scope应用程序所需的权限,则应用程序的用户必须重新进行身份验证,以确保他们已明确授予您的应用程序代表其请求的所有权限。

请求连接:

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

请求参数:

参数描述必须
response_type该字段的值应始终为: codeYES
client_id注册应用程序时生成的API密钥值。Yes
redirect_uri您的用户在授权后发回的URI。此值必须与应用程序配置中定义的OAuth 2.0授权重定向URL之一匹配。例如,https://www.example.com/auth/linkedin。Yes
state您选择的唯一字符串值很难猜到。用于防止CSRF。例如,state=DCEeFWf45A53sdfKef424。No
scopeURL编码,以空格分隔的应用程序代表用户请求的成员权限列表。必须明确要求这些。例如,scope=r_liteprofile%20r_emailaddress%20w_member_social。有关其他信息,请参阅应用程序开发的权限最佳实践Yes

以前可以通过开发人员门户将范围设置为默认值,而不是在此步骤中明确请求它们。现在必须在请求授权代码时明确请求它们。

举例:

GET https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id={your_client_id}&redirect_uri=https%3A%2F%2Fdev.example.com%2Fauth%2Flinkedin%2Fcallback&state=fooobar&scope=r_liteprofile%20r_emailaddress%20w_member_social

响应:
2019-07-03T07:30:36.png

您的申请已获批准
通过提供有效的LinkedIn凭据并单击“ 允许”,该成员批准您的应用程序访问其成员数据并代表他们与LinkedIn交互的请求。此批准指示LinkedIn将成员重定向到您在redirect_uri参数中定义的回调URL 。

附加了redirect_uri两个重要的URL参数,您需要从请求中读取:

  • code - OAuth 2.0授权码。
  • state- 用于测试可能的CSRF攻击的值。

这code是您在身份验证过程的下一步中与LinkedIn交换OAuth 2.0访问令牌的值。出于安全原因,授权码的使用寿命为30分钟,必须立即使用。如果它到期,您必须重复所有前面的步骤以请求另一个授权代码。

在使用授权代码之前,应用程序应确保state参数中返回的state值与原始授权代码请求中的值相匹配。这可以确保您处理真实成员而不是恶意脚本。如果状态值不匹配,您很可能是CSRF攻击的受害者,您的应用程序应该返回401 Unauthorized错误代码作为响应。

申请被拒绝
如果成员选择取消,或者请求因任何原因失败,则会将客户端重定向到您的redirect_uri回调URL,并附加以下附加查询参数:

  • error - 表示以下错误之一的代码:

    • user_cancelled_login - 该成员拒绝登录他们的LinkedIn帐户。
    • user_cancelled_authorize - 该成员拒绝授权您的应用程序的权限请求。
  • error_description - URL编码的文本描述,总结了错误。
  • state- 您的应用程序传递的值,以防止CSRF攻击。

第3步:获取访问令牌token

下一步是使用上一步中的授权代码为您的应用程序获取访问令牌。要执行此操作,请使用以下Content-Type标头发出以下HTTP POST请求x-www-form-urlencoded:

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

请求参数:

参数描述必须
grant_type该字段的值应始终为: authorization_codeYES
code您在步骤2中收到的授权码。YES
redirect_uri与redirect_uri您在上一步中传递的值相同。YES
client_id步骤1中生成的客户端ID值。YES
client_secret步骤1中生成的密钥值。YES

举例

POST /oauth/v2/accessToken HTTP/1.1
Host: www.linkedin.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code={authorization_code_from_step2_response}&redirect_uri=hhttps%3A%2F%2Fdev.example.com%2Fauth%2Flinkedin%2Fcallback&client_id={your_client_id}&client_secret={your_client_secret}

访问令牌响应
成功的访问令牌请求返回包含以下字段的JSON对象:

  • access_token - 应用程序的访问令牌。根据API使用条款的规定,此值必须保持安全。
  • expires_in - 令牌到期前剩余的秒数。目前,所有访问令牌都有60天的使用期限。

注意]访问令牌的长度约为500个字符。我们建议您规划应用程序以处理长度至少为1000个字符的令牌,以适应任何未来的扩展计划。这适用于访问令牌和刷新令牌。

访问令牌范围和生命周期
访问令牌保持有效,直到expires_inAPI响应中字段中指示的秒数为止。只要请求相同的范围,您就可以在多个客户端(浏览器或设备)上浏览OAuth流并同时持有多个有效的访问令牌。如果请求的范围与先前授予的范围不同,则所有先前的访问令牌都将失效。

第4步:进行身份验证请求

获得访问令牌后,您可以通过Authorization在对LinkedIn API的HTTP调用中包含标头,代表该成员开始进行经过身份验证的API请求。

举例:

GET /v2/me HTTP/1.1
Host: api.linkedin.com
Connection: Keep-Alive
Authorization: Bearer {access_token}

处理无效令牌
如果使用无效令牌进行API调用,您将收到401 Unauthorized服务器的响应,并且您必须重新生成令牌。由于以下原因,令牌可能无效:

  • 它已经过期了。
  • 该成员撤销了他们最初授予您的应用程序的权限。
  • 您的应用程序的成员权限(范围)已更改。
  • 如果后续OAuth2流生成了新的访问令牌,则前一个令牌无效。

可预测的到期时间不是无效令牌的唯一因素,因此401 Unauthorized通过将成员重定向回授权工作流程的开头来编写应用程序以正确处理错误非常重要。

备注
500 Internal Server Error如果在验证访问令牌时存在下游故障,则返回A.

第5步:刷新访问令牌

为了保护成员的数据,LinkedIn不会生成长期访问令牌。确保您的应用程序在到期前刷新访问令牌,以避免不必要地再次通过授权过程发送您的应用程序用户。

刷新令牌
刷新访问令牌是一种无缝的用户体验。要刷新访问令牌,请再次执行授权过程以获取新令牌。但是,此时,在刷新工作流程中,如果满足以下条件,则会绕过授权屏幕并将成员重定向到您的回调URL:

  • 该会员仍登录www.linkedin.com
  • 该成员的当前访问令牌尚未过期

如果该成员不再登录www.linkedin.com或其访问令牌已过期,则会通过正常的授权过程发送这些成员。

程序化刷新令牌可用于一组有限的合作伙伴。如果已为您的应用程序启用此功能,请参阅程序化刷新令牌以获取说明。

下一节:个人页/主页分享图文 https://www.xugj520.cn/archives/linkedin-api-1-1.html



评论已关闭