在内部系统上调用基础服务时,在基础服务上加上OAuth验证,基于Spring boot OAuth2.0实现,采用JsonWebToken的方式。accessToken由调用者自己生成,基于RSA生成私钥签名,基础服务公钥验证。
accessToken的生成采用开源的JJWT实现,基础服务的OAuth由spring-security-oauth2框架来自动实现(见:
http://godjohnny.iteye.com/blog/2320220)。
生成accessToken的步骤:
1、生成密钥库文件。
使用keytool。具体过程略。
2、使用该密钥文件生成accessToken
2.1 从密钥库文件加载密钥对
public class JKSUtil {
private String keyStoreFile;
private char[] password;
private KeyStore store;
private Object lock = new Object();
private static JKSUtil instance = null;
public static JKSUtil getInstance() {
synchronized (JKSUtil.class) {
if (instance == null) {
synchronized (JKSUtil.class) {
instance = new JKSUtil("/keystore.jks", "foobar".toCharArray());
}
}
return instance;
}
}
private JKSUtil(String _jksFilePath, char[] password) {
this.keyStoreFile = _jksFilePath;
this.password = password;
}
public KeyPair getKeyPair(String alias) {
return getKeyPair(alias, this.password);
}
public KeyPair getKeyPair(String alias, char[] password) {
try {
synchronized (this.lock) {
if (this.store == null) {
synchronized (this.lock) {
InputStream is = this.getClass().getResourceAsStream(keyStoreFile);
try {
this.store = KeyStore.getInstance("JKS");
this.store.load(is, this.password);
} finally {
if (is != null) {
try {
is.close();
} catch (Exception e) {
}
}
}
}
}
}
RSAPrivateCrtKey key = (RSAPrivateCrtKey) this.store.getKey(alias, password);
RSAPublicKeySpec spec = new RSAPublicKeySpec(key.getModulus(), key.getPublicExponent());
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(spec);
return new KeyPair(publicKey, key);
} catch (Exception e) {
throw new IllegalStateException("Cannot load keys from store: " + this.keyStoreFile, e);
}
}
}
2.2 使用该密钥对,使用JJWT生成accessToken
public static String generateAccessToken() throws Exception {
KeyPair keyPair = JKSUtil.getInstance().getKeyPair("test");
String compactJws = Jwts.builder().setSubject("MyService")
.signWith(SignatureAlgorithm.RS256, keyPair.getPrivate()).compact();
System.out.println(compactJws);
return compactJws;
}
3、在调用基础服务时,HTTP头上加上accessToken
参见:
https://tools.ietf.org/html/rfc6750#section-2.1
基础服务中,启动Oauth2.0验证,并加上密钥库中的公钥(PEM格式)。导出密钥库文件中的公钥,仍然使用keytool命令。
其他:
1、从密钥库中导出DER格式公钥(证书)的命令:
keytool -exportcert -file publie2.crt -keystore keystore.jks -alias test
2、从密钥库中导出PEM格式公钥(证书)的命令:
keytool -exportcert -rfc -file publie2.crt -keystore keystore.jks -alias test
3、JAVA中加载DER格式公钥的方式:
public static PublicKey loadPublicKey(String _pubKeyFile) throws CertificateException, FileNotFoundException {
FileInputStream fis = new FileInputStream(_pubKeyFile);
try {
CertificateFactory certificatefactory = CertificateFactory.getInstance("X.509");
X509Certificate Cert = (X509Certificate) certificatefactory.generateCertificate(fis);
PublicKey pk = Cert.getPublicKey();
return pk;
} finally {
try {
fis.close();
} catch (IOException e) {
}
}
}
分享到:
相关推荐
它使用RSA公钥/私钥对完成此操作。 为什么? 使用用户名和密码的标准模式非常适合用户到服务器的请求,但是缺少服务器到服务器的应用程序。 在这些情况下,由于用户不需要记住密码,因此我们可以使用更安全的方法...
介绍JWT( )的Delphi实现。支持的算法算法地位没有任何 :...生成密钥对# Generate RSA 2048 bits key pair for RS and PS algorithm$ openssl genrsa -out rs-private.pem 2048$ openssl rsa -in rs-private.pem -pubo
使用HMAC和RSA算法之一生成许可证密钥 远程验证许可证密钥 许可证密钥的本地验证 在MongoDB中存储许可证密钥 激活和禁用客户许可证密钥 f-cli工具,用于通过终端管理许可证 请参阅最新的。 如何使用 先决条件 ...
JSON Web令牌工具包v2 jwt_tool.py是用于验证,伪造,扫描和篡改JWT(JSON Web令牌)的工具包。 其功能包括: ...RSA和ECDSA密钥生成和重建(来自JWKS文件) ...还有更多! 观众 该工具是为渗透测试人员
axios-jwt-flow 受python库。 OAuth 2.0 JWT承载令牌流定义了当客户端想要使用先前...使用以下命令生成RSA密钥: openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem yarn
原料药生成(密钥,发行者,clientId,tokenEndpoint,expiresIn,选项) 根据客户端详细信息和客户端的私有RSA256密钥生成有效的客户端断言。参数key {PEM JWK}用于签署断言的密钥。 当前唯一支持的密钥类型是“ ...
salesforce-jwt-generator 使用JWT OAuth Flow要求您执行以下操作: 生成公钥/私钥对创建一个连接的应用程序生成一个使用私钥对其进行签名的JWT 将JWT交换为访问令牌将访问令牌用作承载令牌下面是上述每个步骤的一...
去吧Go库,用于从JWKS(JSON Web密钥集)端点检索RSA公共密钥。安装使用go get github.com/s12v/go-jwks@v0.2.1依存关系github.com/square/go-jose库github.com/patrickmn/go-cache默认的内存缓存例子...
该命令将生成一个名为jwt.jks的文件,其中包含公用密钥和专用密钥。 建议迁移到PKCS12 。 为此,请执行以下命令: keytool -importkeystore -srckeystore jwt.jks -destkeystore jwt.jks -des
该项目附带一组用于生成 JWT 令牌的 RSA 密钥。 可以在 config 目录中找到密钥文件。 要生成新密钥,请执行以下操作: openssl genrsa -out app.rsa 1024 openssl rsa -in app.rsa -pubout > app.rsa.pub 环境变量...
生成密钥对 JWT需要密钥对来签署令牌。 要生成配对,请执行以下操作: openssl genrsa -out private.pem 4096 openssl rsa -in private.pem -pubout -outform PEM -out public_key.pem openssl pkcs8 -topk8 -...
JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。 说得好像跟真的一样,那么到底要怎么进行认证呢? 首先用户登录时,输入用户名和密码后请求服务器登录接口,服务器验证用户名密码正确后,生成token并...
生成jwt secret php artisan jwt:secret ; 游民游 vagrant up 在项目根$ php artisan migrate && php artisan db:seed下流浪汉$ php artisan migrate && php artisan db:seed 。 最后,浏览 ,您应该看到应用...
要在本地运行此项目,必须生成用于签署 json 网络令牌的私有和公共 rsa 密钥,并且可以使用以下命令生成(这适用于基于 Linux 或 Unix 的操作系统): 私钥: openssl genrsa -out private.pem 2048 公钥: ...
Apigee示例:生成JWT并公开JWKS Apigee不包括JWKS内容的内置管理。 JWK在标准定义。 该标准描述了任何系统如何以JSON格式表示各种类型的加密密钥。 一个示例可能是RSA公钥,看起来像这样: {"kty":"RSA", "n": ...
rsa_sig2n 该存储库包含: 基于两个已知消息签名对(基于 ) 为JWT提取并生成RSA和HMAC签名的代码 概念验证代码可利用的密钥混淆漏洞,而无需了解目标的公钥 附加阅读:在
为了生成有效令牌,请生成RSA密钥对,并使用私钥对有效负载进行加密。 将公钥放入public.key文件中,就可以开始了。 有关如何以编程方式生成令牌的示例,请参见/test/createToken.js 。 有效载荷应如下所
贡献运行项目(开发模式) npm run dev运行项目(生产模式) npm start生成JWT密钥对openssl genrsa -out jwt-private.pem 4096 openssl rsa -in jwt-private.pem -outform PEM -pubout -out jwt-public.pem
大写,大写,连接行) 字数和字符数CryptoCurrency转换,Bip39助记符RSA密钥对开发服务器的自签名证书随机字符串和UUID HTTP请求提取呼叫(JS) Unix权限转换器URL缩短,取消缩短用法您可以使用Windows的ctrl+shift+...
Tiny Drive NodeJS入门项目该...3.创建一个包含您生成的私有RSA密钥的tinydrive-nodejs-starter/private.key文件您可以从的JWT Key Manager客户经理那里获得RSA私钥。4.转到目录并安装NPM软件包,然后启动开发服务器。