문제
Flutter와 Spring Security + OAuth2 + JWT 로그인을 구현하면서 OAuth2 로그인과 access token 발급까지 작동하는데 발급 완료후에 flutter_web_auth를 종료시키고 flutter 앱 화면으로 다시 돌아가게 코드를 짜고 싶었는데 flutter_web_auth에서 400 error만 뜨고 flutter 앱으로 돌아가지 않았다.
해결
플러터의 oauth2를 쉽게 도와주는 flutter_web_auth 패키지는
final result = await FlutterWebAuth.authenticate(
url: url.toString(), callbackUrlScheme: "candysignal");
아래 코드처럼 callbackUrlScheme을 설정하면 자동으로 oauth2를 완료하면 앱으로 돌아가게 해주는 url이다.
그럼 이 url만 입력하면 되냐?
아니다. flutter 앱에서 callbackUrlScheme을 설정해주어야한다.
설정방법은 각각 Ios, Android 다르고 검색하면 나오니 여기서는 다루지 않겠다.
그렇게 설정을 완료하고 난 후에 Spring-boot에서 Authentication 성공시 생성된 access token을 담아서 redirect 시켜주는 OAuth2AuthenticationSuccessHandler Class의 redirect 부분을 callbackUrlScheme인 candysignal으로 수정해주어야한다.
처음엔 이것을 몰라서 spring security 설정 부분을 고치기도 하고 redirect url을 수정하면서 헤메었다.
@Override
public void onAuthenticationSuccess(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
String targetUrl = determineTargetUrl(request, response, authentication);
if (response.isCommitted()) {
log.debug("Response has already been committed.");
return;
}
clearAuthenticationAttributes( request, response);
try{
getRedirectStrategy().sendRedirect(request, response, "candysignal:"+targetUrl);
System.out.println("redirect success ");
}catch(Exception e){
System.out.println("redirect failed : "+e);
}
}
이렇게 하면 이제 flutter에서 정상적으로 web_auth 과정을 거치고 앱으로 redirect 되고 candysignal:/?token=토큰값
이런식으로 로그인 시 token값을 받아서 사용할 수 있다.
'Spring-Boot' 카테고리의 다른 글
실시간 시세 시스템아키텍처에 대한 고민, feat.토스증권 (0) | 2023.10.14 |
---|---|
Spring-Boot + redis + kafka로 대용량 트래픽을 관리해보자 (0) | 2023.10.05 |
영속성 컨텍스트란? (0) | 2023.07.02 |
실전스프링부트와 JPA 활용1 -2 (0) | 2022.10.20 |
실전스프링부트와 JPA 활용1 -1 (0) | 2022.10.15 |