接入 JWT 认证
码匠支持通过 JWT (JSON Web Token) 的方式完成用户身份的认证。
认证流程
- 用户通过浏览器访问 JWT 服务并登陆;
- JWT 服务向浏览器写 cookie(cookie 名为 JWT);
- 用户通过浏览器访问码匠服务,并带上 JWT cookie;
- 码匠服务验证并解析 JWT cookie,识别用户身份,用户成功登陆码匠。
💡 说明
这里 JWT 采用 cookie 的方式存储,因此要求 JWT 服务和码匠服务在同域下。

JWT 生成
算法
采用 RSA 非对称加密:JWT server 通过私钥对 JWT 信息进行签名,码匠服务通过公钥进行验签,保证信息不被篡改。
Public key/Private key 生成
点击链接查看应用:Public key & Private key 生成。
字段
字段 | 必需/非必需 | 描述 |
---|---|---|
sub | required | 用户的唯一标识 |
name | required | 用户名 |
avatar | optional | 头像 URL |
其他自定义扩展字段 |
示例代码(以java为例)
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
public class JWTUtils {
public static String generateJWT(RSAPrivateKey privateKey) {
Algorithm algorithm = Algorithm.RSA256(privateKey);
return JWT.create()
.withSubject("1")
.withClaim("name", "张三")
.withClaim("avatar", "https://example.com/avatar-url")
.withClaim("age", 30)
// 可自定义其他扩展字段
.sign(algorithm);
}
/**
* Generate {@link PrivateKey} by private key in base64 string format.
*/
public static PrivateKey generatePrivateKey(String privateKeyInBase64) throws NoSuchAlgorithmException, InvalidKeySpecException {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(processKey(privateKeyInBase64)));
}
/**
* Generate {@link PublicKey} by public key in base64 string format.
*/
public static PublicKey generatePublicKey(String publicKeyInBase64) throws NoSuchAlgorithmException, InvalidKeySpecException {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(new X509EncodedKeySpec(processKey(publicKeyInBase64)));
}
private static byte[] processKey(String key) {
return Base64.getDecoder().decode(key.replaceAll("\\n", "").replaceAll(" ", ""));
}
}
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.3.0</version>
</dependency>
JWT 登陆配置
企业管理员可进入码匠主页的设置 -> 身份源管理 -> JWT 进行设置。
如图,将 base64 格式的 Public key 填入即可。注意不要包含空格、换行符等特殊符号。
