安全应用最佳实践

在领英,我们十分重视成员的隐私。 我们向开发人员授予 API 访问权限,也希望他们能够像我们一样重视成员的隐私权。通过使用 OAuth 2.0 验证协议,我们允许某个应用访问领英数据,同时保护成员的凭证信息。 此协议可确保我们的成员能够安全、轻松地使用领英平台上的应用;但是,作为开发人员,您需要采取几个安全步骤,才能始终并充分确保成员体验的安全性。

请阅读以下指南,并确保应用遵循这些最佳实践:

访问令牌

访问令牌使开发人员能够通过领英 API 访问成员的私人信息。 为确保此类信息的安全性,请勿将其存储在不安全或易于访问的位置。 由于客户端文件 (如 JavaScript 或 HTML 文件) 可轻松访问,因此禁止使用此类文件存储敏感信息。 您也不得将访问令牌存储在可以反编译的代码文件中,如 Native iOS、Android 或 Windows 应用代码文件。 调用领英平台时,必须使用安全的 (HTTPS) 连接传送访问令牌。

开发人员应确保尽量缩小请求的范围,且仅请求应用功能所需的权限。

API 密钥和秘密密钥

调用领英 API 时,您可使用两条个人验证信息: API 密钥 (有时称作“用户密钥”) 和秘密密钥 (或“用户秘密”)。

API 密钥是应用的公用识别符,秘密密钥是保密信息,您只能将其用于领英 API 的应用验证。

由于确认应用身份需同时使用 API 密钥和秘密密钥,因此千万不要向别人透露您的秘密密钥。  以下是有关如何正确存储秘密密钥的几条建议:

  • 创建本机移动应用时,切勿将其存储在本地移动设备上。
  • 切勿在 JavaScript 或 HTML 文件等客户端代码文件中披露此信息。
  • 切勿将其存储在可从外部查看的网络服务器文件上,如配置文件、包含文件等。
  • 切勿将其存储在日志文件或错误消息中。
  • 切勿以电子邮件形式发送此信息,切勿在留言板或其他公共论坛上发布此信息。

请注意,将 OAuth 2.0 授权代码换成访问令牌时,秘密密钥会作为请求的内容同时发送。 切勿公开此请求!

安全端点

为防止他人阅读您的请求并进行中间人攻击,您向验证服务器提出的所有请求都必须通过 HTTPS 进行。 此外,我们强烈建议将应用寄存在安全服务器上,尤其是成员输入私人信息 (例如其网站登录密码) 的页面,以及您为验证 OAuth 流程而请求领英将成员重定向到的网址。

必须使用 HTTPS 提出 OAuth 2.0 请求。

防止网络钓鱼

为窃取用户凭证,网络犯罪分子经常会创建一些外观和使用体验看似真实但实际上是虚假复制品的网站。 请提醒用户留意这些标志,确保他们在真正的领英应用中输入凭证。 请注意,使用不同浏览器查看网站可能会有所不同,但有时候这并不足以区分网络钓鱼网站。 如果存在疑问,请提醒用户不要输入凭证,并要求他们在认为情况可疑时与您联系。

在 Firefox 浏览器中,真正的领英登录页面具有闭合挂锁图标,且其网址的开头部分为“https://www.linkedin.com/...”。请注意,一些网址试图使用常见的拼写错误或使用相似的字符模仿领英,例如将“l” (字母“L”) 换成“1” (数字一)。

与 Firefox 一样,Chrome 会显示一个绿色挂锁,并会突出显示 HTTPS,表示您已连接到正确站点。

跨站请求伪造

为避免在授权期间发生跨站请求伪造,您需要发送一个状态参数。 该参数应是一个难以猜中的唯一字符串值 (针对每个请求),且不应包含任何私人或敏感信息。

状态值示例
state=760iz0bjh9gy71asfFqa

成功授权后,重定向的网址应如下所示:

回调网址示例
https://OAUTH2_REDIRECT_URI/?code=AUTH_CODE&state=760iz0bjh9gy71asfFqa

确保此响应中的状态参数与您在授权请求中发送的参数相同。 如果状态不匹配,则意味着请求可能是跨站请求伪造的结果,必须拒绝。

第三方库

使用第三方库与领英互动时,请运用最佳判断力确保库的来源可靠。 阅读它们的评价、浏览代码并开展一些背景调查,确保其不是恶意的库,不会进行某些意外操作。 领英目前尚未正式支持任何第三方库,因此如果您遇到任何技术问题或难题,请直接联系该库的开发团队。

错误处理

鉴于云 API 的性质,可能会因您或领英无法控制的原因暂时停止提供服务。 您应假设您向领英或任何第三方 API 发起的任何调用可能无法正常工作,且始终在您的请求中包含错误处理逻辑。 其中可以包括以下类似请求:

  • 授权请求 GET (https://www.linkedin.com/uas/oauth2/authorization)
  • 获取数据 GET (https://api.linkedin.com/people/~)
  • 发布数据 POST (https://api.linkedin.com/people/~/shares)