`
rensanning
  • 浏览: 3509850 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37407
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:603972
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:677512
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:86989
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399568
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:68983
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90294
社区版块
存档分类
最新评论

Spring Security OAuth2 Provider 之 整合JWT

 
阅读更多
OAuth2 是认证框架、JWT (JSON Web Tokens) 是认证协议。

相关文章:
Spring Security OAuth2 Provider 之 最小实现
Spring Security OAuth2 Provider 之 数据库存储
Spring Security OAuth2 Provider 之 第三方登录简单演示
Spring Security OAuth2 Provider 之 自定义开发
Spring Security OAuth2 Provider 之 整合JWT

(1)Maven依赖

Authorization Server 和 Resource Server都需要添加依赖。

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-jwt</artifactId>
    <optional>true</optional>
</dependency>


(2)生成签名证书

生成证书
引用
# keytool -genkeypair -alias jwt-test -keyalg RSA -dname "CN=jwt,OU=ren,O=ren,L=china,S=china,C=CN" -keypass my_pass -keystore jwt-test.jks -storepass my_pass

把.jks文件放到Authorization Server 的 src/main/resources/jwt-test.jks

导出公钥
引用
# keytool -list -rfc --keystore jwt-test.jks | openssl x509 -inform pem -pubkey

把PUBLIC KEY部分复制到Resource Server 的 src/main/resources/public.txt

(3)认证服务端设置

@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
    KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("jwt-test.jks"), "my_pass".toCharArray());
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    converter.setKeyPair(keyStoreKeyFactory.getKeyPair("jwt-test"));
    return converter;
}

@Bean
public TokenStore tokenStore() {
    return new JwtTokenStore(accessTokenConverter());
}


(4)资源服务端设置

@Bean
public JwtAccessTokenConverter accessTokenConverter() {
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    Resource resource = new ClassPathResource("public.txt");
    String publicKey = null;
    try {
        publicKey = IOUtils.toString(resource.getInputStream());
    } catch (final IOException e) {
        throw new RuntimeException(e);
    }
    converter.setVerifierKey(publicKey);
    return converter;
}

@Bean
public TokenStore tokenStore() {
    return new JwtTokenStore(accessTokenConverter());
}


(5)确认测试

获取Token:


通过jwt.io确认Token:


通过access_token访问资源API:


(6)算法HS256
把Authorization Server 和 Resource Server的配置改成:
@Bean
protected JwtAccessTokenConverter accessTokenConverter() {
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    converter.setSigningKey("rensanning");
    return converter;
}


获取Token:


通过jwt.io确认Token:


通过access_token访问资源API:


参考:
http://www.baeldung.com/spring-security-oauth-jwt
https://github.com/dynamind/spring-boot-security-oauth2-minimal
  • 大小: 107 KB
  • 大小: 47.2 KB
  • 大小: 94.1 KB
  • 大小: 106.5 KB
  • 大小: 31.9 KB
  • 大小: 67.4 KB
0
0
分享到:
评论
2 楼 bruce_ma 2017-09-07  
给你点个赞。这个系列的文章非常好。唯一的建议可能就是关于JWT的这部分,着实令人迷惑。如果是JWT,第(5)部分获取token那一段(或者说那个获取token的URL),描述得并不清楚。
1 楼 masuweng 2017-07-26  
         

相关推荐

Global site tag (gtag.js) - Google Analytics