particle 接入jwt登录方式
官方文档: https://docs.particle.network/developers/auth-service/custom
2024-04-17: "We only support RS256 now." by particle
流程
- 生成公钥和私钥
- 将生成好的公钥在 https://russelldavies.github.io/jwk-creator/ 生成 JWK
- 将生成好的 JWK 放到 {"keys":[{}]} 的 数组子元素里面,做成 jwks.json 文件
- 上传 jwks.json 文件 到网站或者 对象存储,获取可以外部访问的 your_url
- 在 https://dashboard.particle.network/#/customAuth
- Jwks URI: your_url ;
- Unique Id Key: your_uid
- userId; JWT to Verify: your_token
- 点击 save
代码demo
com.auth0
java-jwt
4.4.0
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.mylomen.demo.common.utils.encryption.RSAUtils;
import com.mylomen.demo.common.utils.file.ResourceFileUtils;
import java.io.File;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
public class JwtTools {
/**
* 参考文档 https://docs.particle.network/developers/auth-service/custom
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//ResourceFileUtils 工具参见 https://mylomen.com/archives/141
File publicKeyFile = ResourceFileUtils.getConfigLocation("classpath:ssh/test_pub").getFile();
File privateKeyFile = ResourceFileUtils.getConfigLocation("classpath:ssh/test_private").getFile();
// 生成密钥对. 当本地没有需要的公私钥时,调用此方法生成. 如果本地已经生成好了 或者已经存在了 则不需要.
//获取 classpath:ssh/test_pub 和 classpath:ssh/test_private 绝对路径 生成
//RSAUtils 工具参见 https://mylomen.com/archives/142
//RSAUtils.generateKey("Absolute_path/ssh/test_pub",
// "Absolute_path/ssh/test_private",
// "yourSecret",
// 2048);
//获取 publicKey
PublicKey publicKey = RSAUtils.getPublicKey(publicKeyFile);
//获取 privateKey
PrivateKey privateKey = RSAUtils.getPrivateKey(privateKeyFile);
System.out.println("####################");
try {
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) publicKey, (RSAPrivateKey) privateKey);
String your_token = JWT.create()
//https://dashboard.particle.network/#/customAuth for Unique Id Key
.withClaim("your_uid", "64603")
.sign(algorithm);
System.out.println(your_token);
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
文章评论