如何在 spring security oauth 中修复不安全的 jwt-set-uri?
How fix unsecured jwt-set-uri in spring security oauth?
我使用 keycloak 作为授权服务器,使用 spring 启动应用程序作为资源服务器。 Keycloak 使用 自签名 TLS。当我打开 keycloak jwk-set-uri 时,它看起来如下:
json格式的响应如下:
{
"keys": [
{
"kid": "pI7XwYgG2l2ehgGg3XQ-N6Jc41_txjSzMQMWzLeyaiw",
"kty": "RSA",
"alg": "RS256",
"use": "sig",
"n": "nwGwgRywBMlKZreioz1nlo-PKWi...",
"e": "AQAB",
"x5c": [
"MIICoTCCAYkCBgFte4jKkTANBgkqhki...jzxMCZL3Xkd4rs="
],
"x5t": "CqljUhhfTCOMFMxORUXeotcSYxk",
"x5t#S256": "4nlGCmpr6OYYHfkylCp2GGt9iefPRv_aq1DB..."
}
]
}
和JwtDecoder
bean定义如下:
@Bean
public JwtDecoder jwtDecoder(){
return NimbusJwtDecoder.withJwkStUri("https://192.168.1.4:8080/.../openid-connect/certs")
}
当我用 https
模式设置 jwkSetUri 时,应用程序不能正常工作,但是如果我用 http
模式设置它,应用程序可以正常工作。问题出在哪里?我该如何解决?
问题是自签名TLS没有在jvm中注册,所以必须注册如下:
- 从浏览器导出证书
- 使用
keytool -import -alias example -keystore "C:\Program Files)\Java\jre1.6.0_22\lib\security\cacerts" -file certificate.cer
或 keytool -importcert -file certificate.cer -keystore "C:\Program Files)\Java\jre1.6.0_22\lib\security\cacerts" -alias example
命令将证书导入 jvm。它会询问密码,jvm默认密码是changeit
.
- 现在重新启动电脑,然后它就会在真主里工作了。
我使用 keycloak 作为授权服务器,使用 spring 启动应用程序作为资源服务器。 Keycloak 使用 自签名 TLS。当我打开 keycloak jwk-set-uri 时,它看起来如下:
json格式的响应如下:
{
"keys": [
{
"kid": "pI7XwYgG2l2ehgGg3XQ-N6Jc41_txjSzMQMWzLeyaiw",
"kty": "RSA",
"alg": "RS256",
"use": "sig",
"n": "nwGwgRywBMlKZreioz1nlo-PKWi...",
"e": "AQAB",
"x5c": [
"MIICoTCCAYkCBgFte4jKkTANBgkqhki...jzxMCZL3Xkd4rs="
],
"x5t": "CqljUhhfTCOMFMxORUXeotcSYxk",
"x5t#S256": "4nlGCmpr6OYYHfkylCp2GGt9iefPRv_aq1DB..."
}
]
}
和JwtDecoder
bean定义如下:
@Bean
public JwtDecoder jwtDecoder(){
return NimbusJwtDecoder.withJwkStUri("https://192.168.1.4:8080/.../openid-connect/certs")
}
当我用 https
模式设置 jwkSetUri 时,应用程序不能正常工作,但是如果我用 http
模式设置它,应用程序可以正常工作。问题出在哪里?我该如何解决?
问题是自签名TLS没有在jvm中注册,所以必须注册如下:
- 从浏览器导出证书
- 使用
keytool -import -alias example -keystore "C:\Program Files)\Java\jre1.6.0_22\lib\security\cacerts" -file certificate.cer
或keytool -importcert -file certificate.cer -keystore "C:\Program Files)\Java\jre1.6.0_22\lib\security\cacerts" -alias example
命令将证书导入 jvm。它会询问密码,jvm默认密码是changeit
. - 现在重新启动电脑,然后它就会在真主里工作了。