스프링 부트 REST 응용 프로그램에서 Firebase를 사용하는 방법
Firebase에서 실행되는 인증에 의존하는 Spring Boot REST 어플리케이션을 사용하고 있습니다.
클라이언트 측에서 Firebase가 토큰을 생성하므로 Spring Boot에서 이 토큰이UID
.
단, 코드는 콜백모드입니다만, 어떻게 하면 작업을 완료할 수 있을까요?
@RequestMapping(value = "/api/restCall", method = RequestMethod.POST,
consumes = "application/json", produces = "application/json")
public Object restCall(@RequestBody Parameters requestBody) throws Exception {
String idToken = requestBody.getToken();
Task<FirebaseToken> task = FirebaseAuth.getInstance().verifyIdToken(idToken)
.addOnSuccessListener(new OnSuccessListener<FirebaseToken>() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
String uid = decodedToken.getUid();
}
});
return "???"; // what return here?
}
그 후에 어떻게 돌아가죠?onSuccess
?DeferredResult
?
Firebase와 Spring을 통합하기 위한 샘플 코드는 다음과 같습니다.
새로운 Admin SDK 에서는, 이하의 코드 스니펫을 사용하는 것만으로, 프로세스가 간단합니다.
FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
상세한 것에 대하여는, 다음의 URL 를 참조해 주세요.https://firebase.google.com/docs/auth/admin/manage-users
레거시 코드용입니다.먼저 Firbase 의존관계 추가
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-server-sdk</artifactId>
<version>3.0.1</version>
</dependency>
샘플 코드
@Component
public class FirebaseAuthenticationProvider implements AuthenticationProvider {
@Autowired
@Qualifier(value = UserServiceImpl.NAME)
private UserDetailsService userService;
public boolean supports(Class<?> authentication) {
return (FirebaseAuthenticationToken.class.isAssignableFrom(authentication));
}
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
if (!supports(authentication.getClass())) {
return null;
}
FirebaseAuthenticationToken authenticationToken = (FirebaseAuthenticationToken) authentication;
UserDetails details = userService.loadUserByUsername(authenticationToken.getName());
if (details == null) {
throw new FirebaseUserNotExistsException();
}
authenticationToken = new FirebaseAuthenticationToken(details, authentication.getCredentials(),
details.getAuthorities());
return authenticationToken;
}
}
완전한 예에 대해서는 아래 링크의 github를 참조해 주십시오.https://github.com/savicprvoslav/Spring-Boot-starter CRUD를 사용한 블로그 포스트의 완전한 조작: https://medium.com/techwasti/spring-boot-firebase-crud-b0afab27b26e
여기 내 질문에 대답하려는 나 자신의 시도가 있다.
@RequestMapping(value = "/api/restCall", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public Object restCall(@RequestBody Parameters requestBody,@RequestHeader(value = FIREBASETOKEN, required = true) String idToken) throws Exception {
// idToken comes from the HTTP Header
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdTokenAsync(idToken).get();
final String uid = decodedToken.getUid();
// process the code here
// once it is done
return object;
}
아래 코드도 시도해 볼 수 있습니다.
FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
자세한 내용은http://https://firebase.google.com/docs/auth/admin/manage-users 를 참조해 주세요.
Firebase와 Spring을 통합하려면 Spring 앱을 리소스 서버로 구성하고 검증에 사용되는 공개 키를 다운로드할 수 있는 URL을 제공하기만 하면 됩니다.
의존 관계
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
application.yaml
파일:
spring:
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com
issuer-uri: https://securetoken.google.com/${FIREBASE_APP_NAME}
가능하게 하다http.oauth2ResourceServer().jwt()
:
@RestController
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@GetMapping(path = "/user")
public String test(Principal principal) {
return principal.getName();
}
@Configuration
public static class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
http.oauth2ResourceServer().jwt();
}
}
}
그런 다음 Firebase에서 제공하는 토큰을 인증에 사용할 수 있습니다.
curl --location --request GET 'http://localhost:8080/user' \
--header 'Authorization: Bearer <TOKEN>'
다음은 인증 및 인가 흐름 설정 방법에 대한 블로그 게시물입니다.
Firebase Auth and Spring Security 인증 (Sebastijan Grabar, 2021년 12월 13일)
레퍼런스
언급URL : https://stackoverflow.com/questions/39183107/how-to-use-firebase-with-spring-boot-rest-application
'itsource' 카테고리의 다른 글
WooCommerce 2.2+에 번역 파일을 수동으로 설치하는 방법 (0) | 2023.03.18 |
---|---|
리포지토리가 깨끗하지 않습니다.Angular 8에서 업데이트하기 전에 변경 사항을 커밋하거나 저장하십시오. (0) | 2023.03.18 |
데이터베이스에 어레이 저장: JSON vs. serialized 어레이 (0) | 2023.03.18 |
스프링 부트 보안 CORS (0) | 2023.03.18 |
jQuery looping .each() JSON 키/값이 작동하지 않습니다. (0) | 2023.03.18 |