跳转到内容

Crowdin 应用程序的安全性

为了确保 Crowdin 应用在使用 Crowdin 数据时(即通过 crowdin_app 授权)的高级别安全性,我们开发了一套安全机制。 该安全机制的核心原理基于 Crowdin 与 Crowdin 应用之间的 JWT 令牌交换。 JWT 令牌使用只有最后两方知道的 OAuth 客户端密钥进行签名。 这样,Crowdin 应用就能确认页面是在 Crowdin 中打开的。

要在您的 Crowdin 应用程序中实现授权和身份验证,请按照以下步骤操作:

  • 在您的应用描述符中添加通过 crowdin_app 进行的授权,并添加用于授权的 OAuth 客户端 ID。
  • 在您的 Crowdin 应用中添加回调,以处理安装事件
  • 在您的 Crowdin 应用程序所需的应用程序描述符中指定必要的范围集。 指定的范围集不应超出 OAuth 中指定的范围。

通过上述方式,每次向 Crowdin 应用发出请求时,Crowdin 都会传递一组参数以及安全令牌,该令牌可通过 OAuth 中的密钥进行验证。

以下是 Crowdin 用于打开模块页面的 URL 示例。

Terminal window
https://example.com/app-module?jwtToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJCcjRhMmhwUW……MX0.yt-lbv3Z8JyIGX4jG405mjZvX8lwc1q0EfWdTtm9GCc&origin=https://{domain}.crowdin.com&clientId=your-client-id

查询参数:

jwtToken

类型: string

描述: 用于授权的 JWT 令牌。

origin

类型: string (url)

描述: 用于打开模块页面的主机。

clientId

类型: string

描述:用于授权的 OAuth 客户端的 ID。

最佳实践是向 Crowdin 应用程序添加中间件,以验证每个请求是否具有带有有效签名和到期时间的令牌。 您可以使用现有库之一来验证令牌的真实性。

JWT 令牌包含以下部分:

  • 头部 - 包含关于令牌类型和编码算法的信息。
  • 载荷 - 包含关于令牌签发的额外信息和令牌的过期时间、令牌签发者和请求者的信息和其他上下文信息。
  • 签名 - 基于头部和载荷的签名部分。

JWT 令牌有效载荷示例:

{
"aud": "Br4a2hpQiNW96anuuO4a",
"sub": "1",
"domain": null,
"context": {},
"iat": 1600000000,
"exp": 1600000900
}

参数:

aud

类型: string

描述:发布令牌的 OAuth 客户端的 ID。

sub

类型: string

描述:正在向 Crowdin 应用程序发出请求的用户的标识符。

domain

类型: string|null

必填:

描述: 访问应用时所在组织的名称。 对于 Crowdin,domain 值始终为 null

context

类型: object

描述: 有关打开 Crowdin 应用模块的环境信息(例如项目、语言、用户时区等)。

iat

类型: integer

描述: 标识令牌的签发时间。

exp

类型: integer

描述: 标识令牌的过期时间。

本页面对你有帮助吗?