REST API文档
RSA 加密
RSA
RSA 加密算法是一种可逆的非对称加密算法,即 RSA 加密时候用的密钥(公钥)和 RSA 解密时用的密钥(私钥)不是同一把。
基本原理是将两个很大的质数相乘很容易得到乘积,但是该乘积分解质因数却很困难。RSA 算法被广泛的用于加密解密和 RSA 签名/验证等领域。
为了解决明文传输带来的不安全问题,现 XSwitch 系统也支持使用 RSA 加密算法将数据加密后进行交互。
生成 RSA 公钥和私钥
通过非对称性加密算法生成公私钥应用于加密。生成公私钥的方式有很多,比如OpenssL
、OpenSSH
的ssh-keygen
以及GnuPG
的gpg
。当然也可以选择一些在线生成工具,选择密钥格式及密钥长度(目前仅支持 2048Bits),生成对应的公钥和私钥保存在系统配置文件中。
将获取到的公/私钥存在xtra_config.lua
中
使用 RSA 公钥加密文本
获取公钥
在使用 RSA 加密时,需将xtra_config.lua
文件中参数login_with_rsa
设置为true
(默认 false)。
- 请求 URL:
/api/configs
获取rsa_public_key
- 请求方式:
GET
公钥加密文本
通过公钥信息rsa_public_key
,对原始文本数据进行RSA
加密。在进行 RSA 加密时,填充模式不填或选择ENCRYPTION_PKCS1
随机填充数据模式,对应无须设置参数Hash
和MGFHash
。
比如通过用户名、密码登录获取 token 这个功能,将原始文本 RSA 加密如下:
原始文本
{ "login": "admin", "password": "XSwitch.cn/6753997" }
加密工具示例如下图所示:
加密后数据
o6ru3+MM0Frb9jkQkI9XuQ5vItjw37qJFCtj4p4d4UYaey7LPdEuSih40BuEK60CdqXP1MrVXaV+H5H6vpaAzl0QTv7FNSBKaH1tO0aLV1AwO5YeGKjPR5nqTYls4Cp7v2HdVrGzqP5e2oRPUwe8/1BvwQwSAhT7qVbmU4nS+kcppGdiXKXrPpVRTmOkshrbaS11w7/uaEZHAQqnDcidH3Ag3xXnky9CzdboqsjGgUVj/9Mlr1huVT2feMSBu6eFOsVo92DulttHCp7ye0V2ySUS3C2eDTXeadcV9cSH0AGN6baPGSTsydrPIfRPvMdtEMgt33wajl50NKILTZC1Uw==
加密登录
传输数据通过 RSA 加密后,通过参数 a 传入。以登录为例,将上一步获取到的加密结果传入到 a,如下所示:
- 请求 URL:
/api/sessions
获取 token 例子 - 请求方式:
POST
- Body 信息:
{ "a": "o6ru3+MM0Frb9jkQkI9XuQ5vItjw37qJFCtj4p4d4UYaey7LPdEuSih40BuEK60CdqXP1MrVXaV+H5H6vpaAzl0QTv7FNSBKaH1tO0aLV1AwO5YeGKjPR5nqTYls4Cp7v2HdVrGzqP5e2oRPUwe8/1BvwQwSAhT7qVbmU4nS+kcppGdiXKXrPpVRTmOkshrbaS11w7/uaEZHAQqnDcidH3Ag3xXnky9CzdboqsjGgUVj/9Mlr1huVT2feMSBu6eFOsVo92DulttHCp7ye0V2ySUS3C2eDTXeadcV9cSH0AGN6baPGSTsydrPIfRPvMdtEMgt33wajl50NKILTZC1Uw==" }
- 返回值:
{ "expires": 1683313540, "currentAuthority": "admin", "token": "46dfd004-13c5-4a36-b4db-cf9cda516adb", "system_roles": { "roles_str": "()", "senior_roles_str": "()" }, "user_id": 1, "extn": "admin", "super_admin": 1, "code": 200 }