Angular, Android 및 Spring Boot에서 Bearer 토큰 인터셉터에 대한 완벽 가이드

  • 각 HTTP 요청에서 코드 반복을 방지하기 위해 인터셉터를 사용하여 인증을 중앙 집중화합니다.
  • 클라이언트 측 토큰 주입부터 서버 측 JWT 유효성 검사까지 양방향 보안 흐름을 구현합니다.
  • Angular의 HttpInterceptor, Android의 OkHttp, Spring Boot의 보안 필터와 같은 특정 도구의 사용.

무기명 토큰

우리가 필요한 애플리케이션의 세계를 깊이 파고들 때 보안 및 접근 제어백엔드에서 모든 요청에 ​​대해 신원 확인을 요구하는 것은 흔한 일입니다. 매번 동일한 토큰을 수동으로 전송하는 번거로움을 피하기 위해, 요청이 서버로 전송되기 전에 수정할 수 있는 스마트 톨게이트 역할을 하는 인터셉터라는 도구가 있습니다.

이 접근 방식을 사용하는 가장 큰 장점은 원칙을 존중한다는 것입니다. DRY(반복하지 마세요)코드가 마치 고장난 레코드처럼 반복적인 소리를 내지 않도록 합니다. 헤더 관리를 중앙 집중화함으로써 애플리케이션의 효율성을 크게 향상시킵니다. 유지 관리가 쉽고 깨끗합니다.이를 통해 각 서비스에 반복적인 try-catch 블록을 채워 넣지 않고도 전역적으로 오류를 포착할 수 있습니다.

Angular에서 인터셉터 활용하기

Angular 생태계에서 인터셉터는 기본적으로 인터페이스를 구현해야 하는 클래스입니다. HttpInterceptor이 인터페이스는 우리에게 라는 이름의 메서드를 정의하도록 강요합니다. intercept현재 요청을 받는 객체와 해당 요청을 체인의 다음 단계로 전달하는 역할을 하는 핸들러가 있습니다.

인터셉터 없이 토큰을 전송하려고 하면 객체를 생성해야 합니다. HttpHeaders 매번 호출할 때마다 이런 일이 발생하는데, 정말 성가십니다. 인터페이스를 구현함으로써 우리는 다음과 같은 이점을 누릴 수 있습니다. 요청을 복제하세요 (Angular에서 요청은 변경 불가능하므로) Bearer 토큰을 추가해야 합니다. 이를 위해서는 해당 클래스를 등록하는 것이 필수적입니다. app.module.ts 공급자 배열 내에서 키를 사용하여 HTTP_INTERCEPTORS 그리고 필드를 표시합니다 multi: true 기존에 존재하는 다른 인터셉터를 덮어쓰지 않도록 하기 위함입니다.

토큰을 추가하는 것 외에도, 우리는 다음과 같은 기능을 활용할 수 있습니다. RxJS와 catchError 연산자 실패한 응답을 처리하기 위해서입니다. 이렇게 하면 서버에서 오류가 반환될 경우 인터셉터가 해당 오류를 포착하여 사용자 지정 메시지를 표시하거나 사용자를 리디렉션할 수 있으므로 비즈니스 로직과 네트워크 오류 처리를 분리할 수 있습니다.

암호화되지 않은 데이터를 전송하는 Android 애플리케이션
관련 기사 :
Android 앱이 암호화되지 않은 데이터를 전송하고 있나요? 개인정보 보호, 보안 및 데이터를 보호하는 데 권장되는 앱에 대한 포괄적인 가이드입니다.

OkHttp와 Retrofit을 사용한 Android 구현

안드로이드 앱 개발로 넘어가면, 다음과 같은 조합이 있습니다. OKHttp와 레트로핏 이것이 바로 최고 기준입니다. 여기서도 과정은 비슷하지만 아주 흥미로운 반전이 있습니다. 우리는 다음을 사용할 수 있습니다. 개인 맞춤형 주석 으로 @InjectAuth 어떤 요청에 토큰이 필요한지, 어떤 요청은 공개해야 하는지를 결정합니다.

이 흐름은 다음을 생성하는 것으로 구성됩니다. 인증 인터셉터 해당 요청을 분석합니다. API 메서드에 저희 어노테이션이 표시되어 있으면 인터셉터는 자동으로 인증 헤더를 삽입합니다. 이를 통해 개발자는 각 Retrofit 인터페이스 정의에 토큰을 추가할 필요가 없어지며, 효율성이 크게 향상됩니다. 프로젝트 확장성 그리고 코드 정리.

안드로이드에서 VPN을 활성화하는 방법
관련 기사 :
안드로이드에서 VPN을 활성화하고 유해 트래픽을 차단하는 방법

자바스크립트에서 Axios의 역할

순수 자바스크립트 또는 경량 프레임워크로 개발하는 사람들을 위해, Axios 이 기능은 매우 강력하고 구성하기 쉬운 인터셉터 기능을 제공합니다. 우리는 두 가지 모두에 대해 인터셉터를 정의할 수 있습니다. 요구 으로 답변.

요청 인터셉터는 요청이 전송되기 직전에 실행되므로, 코드를 삽입하기에 이상적인 위치입니다. Authorization: Bearer token반면에 응답 가로채기를 사용하면 데이터가 최종 응답에 도달하기 전에 처리할 수 있습니다. .then() 또는 await또는 심지어 수행하기도 합니다 디버그 로그 타임스탬프를 비교하여 서버 응답에 걸린 시간을 계산합니다.

Spring Boot와 JWT를 사용한 백엔드 보안

클라이언트 측 배포가 제대로 작동하려면 서버는 이러한 토큰을 관리하는 방법을 알아야 합니다. 봄 부팅아키텍처는 일반적으로 구현됩니다. JWT(JSON 웹 토큰)JWT 토큰은 헤더, 페이로드(사용자 데이터 및 권한 포함), 그리고 변조 방지를 위한 디지털 서명의 세 부분으로 구성됩니다.

이 과정은 인증으로 시작되는데, 사용자가 자격 증명을 전송하면 서버가 인증서를 생성합니다. 서명된 토큰그 후, 권한 필터가 구현됩니다(예: OncePerRequestFilter이 필터는 수신되는 모든 전화를 가로채서 헤더에서 토큰을 추출합니다. 비밀 키를 사용하여 검증됨 그리고, 만약 올바르다면, Spring 보안 컨텍스트에서 인증을 설정하여 해당 리소스에 대한 접근을 허용합니다.

중간자 공격(BRM)이란 무엇이고, 어떤 공격을 하는가?
관련 기사 :
브라우저 중간자 공격이란 무엇이고, 이를 어떻게 보호할 수 있나요?

클라이언트 측에 강력한 인터셉터 시스템을, 서버 측에 필터를 갖추면 다음과 같은 이점을 얻을 수 있습니다. 안전한 통신 효율적이기도 합니다. Angular의 요청 복제부터 Retrofit의 어노테이션, Spring Boot의 서명 유효성 검사에 이르기까지 목표는 항상 동일합니다. 프로그래머가 지루한 인프라 작업을 반복하는 대신 기능 개발에 집중할 수 있도록 보안을 자동화하는 것입니다. 더 많은 사람들이 주제에 대해 알 수 있도록 이 정보를 공유하세요.


선호하는 소스로 추가