Spring oauth2 refresh token - Cannot convert access token to JSON

后端 未结 5 892
长发绾君心
长发绾君心 2021-01-18 03:46

I\'m trying to use a refresh token in a Spring OAuth application without success. The system will issue a refresh token on a password grant:

  {
  \"access_t         


        
相关标签:
5条回答
  • 2021-01-18 04:23

    So it looks like the issue was an invalid refresh_token format. Due to my config, what the auth server was expecting was a valid JWT, whereas I was sending it a plain bearer token. Hence the error message 'cannot convert token to JSON'.

    Incidentally, I found this document useful in understanding how all the parts of Spring OAuth fit together, which led me to figuring out what was going on here:

    https://github.com/spring-projects/spring-security-oauth/blob/master/docs/oauth2.md

    0 讨论(0)
  • 2021-01-18 04:25

    I had the same issue. After some debugging it turned out my signature did not match.

    In my case i set-up keys a bit differently, and there is a bug where the signing and verifying key miss-match.

    https://github.com/spring-projects/spring-security-oauth/issues/1144

    0 讨论(0)
  • 2021-01-18 04:26

    Also has same issue with Spring Boot 1.5.4

    It is really actual that jwtAccessTokenConverter.setVerifierKey(publicKey);doesn't really set verifier(in debug value is null) that is used in -

    JwtAccessTokenConverter
    ...protected Map<String, Object> decode(String token) {
            try {
                Jwt jwt = JwtHelper.decodeAndVerify(token, verifier);
    

    as workaround helped:

    private JwtAccessTokenConverter jwtAccessTokenConverter() {
            JwtAccessTokenConverter jwtAccessTokenConverter = new CustomTokenEnhancer();
            jwtAccessTokenConverter.setSigningKey(jwtSigningKey);
            jwtAccessTokenConverter.setVerifier(new RsaVerifier(jwtPublicKey));
            log.info("Set JWT signing key to: {}", jwtAccessTokenConverter.getKey());
    
            return jwtAccessTokenConverter;
        }
    
    0 讨论(0)
  • 2021-01-18 04:27

    had this issue. i was sending the "Bearer xxxxxx..." and the TokenEnhancer was expecting just "xxxxx..." without the "Bearer " prefix

    0 讨论(0)
  • 2021-01-18 04:41

    It is been two years I don't if it helps anyone but my same issue was due to I was not using the tokenEnhancer I used in my JwtTokenStore in my token service provider DefaultTokenServices.

    <!-- Access token converter -->
    <bean id="jwtAccessTokenConverter"
          class="org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter">
        <property name="signingKey" value="${security.jwt.signing-key}"/>
    </bean>
    
    <!-- Token store -->
    <bean id="jwtTokenStore"
          class="org.springframework.security.oauth2.provider.token.store.JwtTokenStore">
        <constructor-arg name="jwtTokenEnhancer" ref="jwtAccessTokenConverter"/>
    </bean>
    
    <!-- Creates token store services provider -->
    <bean id="tokenServiceProvider"
          class="org.springframework.security.oauth2.provider.token.DefaultTokenServices">
        <property name="tokenStore"
                  ref="jwtTokenStore"/>
        <!--This must be set according to z docs -->
        <property name="tokenEnhancer"
                  ref="jwtAccessTokenConverter"/>
        <property name="supportRefreshToken"
                  value="true"/>
        <property name="accessTokenValiditySeconds"
                  value="${security.jwt.access-token-validity-seconds}"/>
        <property name="refreshTokenValiditySeconds"
                  value="${security.jwt.refresh-token-validity-seconds}"/>
    </bean>
    
    0 讨论(0)
提交回复
热议问题