Last active
November 26, 2023 03:38
-
-
Save sandipchitale/757c3646550fc698f412b4c2a2c07771 to your computer and use it in GitHub Desktop.
Split Oauth2 Token Response #springboot #oauth2 #splittoken
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import javax.servlet.http.Cookie; | |
import javax.servlet.http.HttpServletResponse; | |
import org.aspectj.lang.ProceedingJoinPoint; | |
import org.aspectj.lang.annotation.Around; | |
import org.aspectj.lang.annotation.Aspect; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.http.ResponseEntity; | |
import org.springframework.security.oauth2.common.DefaultExpiringOAuth2RefreshToken; | |
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; | |
import org.springframework.security.oauth2.common.OAuth2AccessToken; | |
import org.springframework.web.context.request.RequestContextHolder; | |
import org.springframework.web.context.request.ServletRequestAttributes; | |
@Configuration | |
@Aspect | |
public class OauthTokenInterceptorConfig { | |
@Around("execution(* org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(..))") | |
private Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { | |
ResponseEntity<OAuth2AccessToken> oAuth2AccessTokenResponse = (ResponseEntity<OAuth2AccessToken>) proceedingJoinPoint | |
.proceed(); | |
DefaultOAuth2AccessToken defaultOAuth2AccessToken = (DefaultOAuth2AccessToken) oAuth2AccessTokenResponse | |
.getBody(); | |
HttpServletResponse httpServletResponse = ((ServletRequestAttributes) RequestContextHolder | |
.getRequestAttributes()).getResponse(); | |
splitToken(defaultOAuth2AccessToken, httpServletResponse); | |
return oAuth2AccessTokenResponse; | |
} | |
private static void splitToken(DefaultOAuth2AccessToken defaultOAuth2AccessToken, HttpServletResponse httpServletResponse) { | |
String accessTokenValue = defaultOAuth2AccessToken.getValue(); | |
String[] accessTokenParts = accessTokenValue.split("\\."); | |
defaultOAuth2AccessToken.setValue(accessTokenParts[1]); | |
Cookie accessTokenCookie = new Cookie("access_tooken_cookie", accessTokenParts[0] + "." + accessTokenParts[2]); | |
accessTokenCookie.setMaxAge(-1); | |
accessTokenCookie.setHttpOnly(true); | |
accessTokenCookie.setPath("/"); | |
httpServletResponse.addCookie(accessTokenCookie); | |
DefaultExpiringOAuth2RefreshToken refreshToken = (DefaultExpiringOAuth2RefreshToken) defaultOAuth2AccessToken | |
.getRefreshToken(); | |
String refreshTokenValue = refreshToken.getValue(); | |
String[] refreshTokenParts = refreshTokenValue.split("\\."); | |
defaultOAuth2AccessToken.setRefreshToken(new DefaultExpiringOAuth2RefreshToken(refreshTokenParts[1], refreshToken.getExpiration())); | |
Cookie refreshTokenCookie = new Cookie("refresh_tooken_cookie", refreshTokenParts[0] + "." + refreshTokenParts[2]); | |
refreshTokenCookie.setMaxAge(-1); | |
refreshTokenCookie.setHttpOnly(true); | |
refreshTokenCookie.setPath("/"); | |
httpServletResponse.addCookie(refreshTokenCookie); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment