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 示例。
https://example.com/app-module?jwtToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJCcjRhMmhwUW……MX0.yt-lbv3Z8JyIGX4jG405mjZvX8lwc1q0EfWdTtm9GCc&origin=https://{domain}.crowdin.com&clientId=your-client-id查询参数:
jwtToken | 类型: 描述: 用于授权的 JWT 令牌。 |
origin | 类型: 描述: 用于打开模块页面的主机。 |
clientId | 类型: 描述:用于授权的 OAuth 客户端的 ID。 |
最佳实践是向 Crowdin 应用程序添加中间件,以验证每个请求是否具有带有有效签名和到期时间的令牌。 您可以使用现有库之一来验证令牌的真实性。
JWT 令牌包含以下部分:
- 头部 - 包含关于令牌类型和编码算法的信息。
- 载荷 - 包含关于令牌签发的额外信息和令牌的过期时间、令牌签发者和请求者的信息和其他上下文信息。
- 签名 - 基于头部和载荷的签名部分。
JWT 令牌有效载荷示例:
{ "aud": "Br4a2hpQiNW96anuuO4a", "sub": "1", "domain": null, "context": {}, "iat": 1600000000, "exp": 1600000900}参数:
aud | 类型: 描述:发布令牌的 OAuth 客户端的 ID。 |
sub | 类型: 描述:正在向 Crowdin 应用程序发出请求的用户的标识符。 |
domain | 类型: 必填: 是 描述: 访问应用时所在组织的名称。 对于 Crowdin,domain 值始终为 |
context | 类型: 描述: 有关打开 Crowdin 应用模块的环境信息(例如项目、语言、用户时区等)。 |
iat | 类型: 描述: 标识令牌的签发时间。 |
exp | 类型: 描述: 标识令牌的过期时间。 |