2017-09-21 6 views
1

jwtでスプリングブートoauthをセットアップする方法については、this tutorialを参照してください。 Angularを使用してJWTトークンをデコードする方法について説明しますが、デコードしてResource Serverコントローラ内のカスタム要求にアクセスするにはどうすればよいですか?リソースサーバーコントローラ内でSpring OAuth 2 JWTペイロードにアクセスしますか?

は、例えばJJWTでそれは(Based on this article)のように行うことができます。

String subject = "HACKER"; 
    try { 
     Jws jwtClaims = 
      Jwts.parser().setSigningKey(key).parseClaimsJws(jwt); 

     subject = claims.getBody().getSubject(); 

     //OK, we can trust this JWT 

    } catch (SignatureException e) { 

     //don't trust the JWT! 
    } 

そして春にはJWTAccessTokenConverter.decode()方法がありますが、Javadocは不足している、そしてそれが保護されています。

1)を取得春AuthenticationにJWTのコンテンツをコピーするには:

@Configuration 
@EnableResourceServer 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class SecurityConfig extends ResourceServerConfigurerAdapter{ 

    @Override 
    public void configure(ResourceServerSecurityConfigurer config) { 
     config.tokenServices(createTokenServices()); 
    } 

    @Bean 
    public DefaultTokenServices createTokenServices() { 
     DefaultTokenServices defaultTokenServices = new DefaultTokenServices(); 
     defaultTokenServices.setTokenStore(createTokenStore()); 
     return defaultTokenServices; 
    } 

    @Bean 
    public TokenStore createTokenStore() {    
     return new JwtTokenStore(createJwtAccessTokenConverter()); 
    } 

    @Bean 
    public JwtAccessTokenConverter createJwtAccessTokenConverter() { 
     JwtAccessTokenConverter converter = new JwtAccessTokenConverter();  
     converter.setAccessTokenConverter(new JwtConverter()); 
     return converter; 
    } 

    public static class JwtConverter extends DefaultAccessTokenConverter implements JwtAccessTokenConverterConfigurer { 

     @Override 
     public void configure(JwtAccessTokenConverter converter) { 
      converter.setAccessTokenConverter(this); 
     } 

     @Override 
     public OAuth2Authentication extractAuthentication(Map<String, ?> map) { 
      OAuth2Authentication auth = super.extractAuthentication(map); 
      auth.setDetails(map); //this will get spring to copy JWT content into Authentication 
      return auth; 
     } 
    } 
} 

2)アクセストークンのコンテンツをどこでも、あなたのコード内で:ここ

答えて

4

は、私は春ブーツでカスタムJWT請求をアクセスしていますがどのように

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();   
Object details = authentication.getDetails();   
if (details instanceof OAuth2AuthenticationDetails){ 
    OAuth2AuthenticationDetails oAuth2AuthenticationDetails = (OAuth2AuthenticationDetails)details; 

    Map<String, Object> decodedDetails = (Map<String, Object>)oAuth2AuthenticationDetails.getDecodedDetails(); 

    System.out.println("My custom claim value: " + decodedDetails.get("MyClaim")); 
} 
関連する問題