[android sdk] 안드로이드에서 JWT 사용하기 

JWT

JSON Web Token의 약자로 안정성 있게 데이터를 교환하기 위해 사용합니다.

로그인 시 서버에서 토큰을 발급받고 정보를 주고 받을 때 헤더에 토큰을 사용하여 데이터를 주고 받습니다.

안드로이드에서의 JWT 사용과정

  1. 아이디 비밀번호 등을 통해 사용자가 로그인을 함
  2. 서버에서 토큰(access token)을 발급
  3. 토큰을 저장소(preference ... )에 저장
  4. 서버에 요청할 때 저장소의 토큰을 header에 넣어 요청함

Shared Preference

간단한 설정 값을 앱 내부의 DB에 저장하기 용이한 내부 저장소입니다. (앱 삭제시 데이터도 소거됩니다)

사용방법

  1. Preference Class 생성 후 preference 인스턴스를 생성합니다.
class Prefs(context: Context) {
    private val prefNm="mPref"
    private val prefs=context.getSharedPreferences(prefNm,MODE_PRIVATE)
}
  1. get set 메서드를 통해 관리합니다.
var token:String?
    get() = prefs.getString("token",null)
    set(value){
        prefs.edit().putString("token",value).apply()
    }
  1. 효율적인 자원관리를 위해 싱글톤 패턴을 사용하고 가장 먼저 실행되기 위해 Application을 상속받은 class에서 onCreate 전에 초기화해줍니다.
class App :Application(){
    companion object{
        lateinit var prefs:Prefs
    }
    override fun onCreate() {
        prefs=Prefs(applicationContext)
        super.onCreate()
    }
}
  1. manifast에서 application을 등록합니다
<application android:name="com.example.App" ... </application>
  1. Shared Preference에서 토큰을 저장하고 가져올 수 있습니다
// 토큰 저장하기
App.prefs.token=token
// 토큰 가져오기
val token = App.prefs.token

이제 Shared Preference를 사용하여 발급받은 토큰을 저장할 수 있게 되었습니다.

retrofit의 @Header 어노테이션을 사용하여 저장된 토큰을 헤더에 넣을 수 있습니다.

OkHttp3 Interceptor 사용하기

일일히 retrofit 메서드에 토큰을 부여할 수 있지만 메서드의 양이 많아지면 귀찮아집니다.

OkHttp3의 Interceptor를 사용하면 REST API를 요청할 때 Interceptor가 요청을 가로채(intercept) 헤더를 붙인 뒤 다시 전송해줍니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

사용방법

  1. Interceptor 생성
class AuthInterceptor : Interceptor {
        override fun intercept(chain: Interceptor.Chain): Response {
            var req =
                chain.request().newBuilder().addHeader("Authorization", App.prefs.token ?: "").build()
            return chain.proceed(req)
        }
    }

Interceptor를 상속받아 intercept 메서드를 구현합니다.

chain에 "Authorization"이라는 key와 prefs의 value를 가진 헤더를 붙인 뒤 return해줍니다.

  1. Client 생성
val okHttpClient = OkHttpClient.Builder().addInterceptor(AuthInterceptor()).build()

만들어 놓은 interceptor를 바탕으로 okHttpClient를 생성합니다.

  1. Client와 retrofit의 인스턴스를 연결
val retrofit: Retrofit by lazy {
            Retrofit.Builder()
                .client(okHttpClient)
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create()).build()
        }

retorit의 인스턴스를 생성할 때 client를 연결해줌으로써 OkHttp3 Interceptor를 사용하는 과정이 끝났습니다.

이제 프로젝트를 진행할 때 편하게 JWT 인증 방식을 사용할 수 있게 되었습니다!

[출처] https://velog.io/@jinstonlee/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%97%90%EC%84%9C-JWT-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
121 [android studio] 안드로이드 스튜디오 패키지명 변경 방법 file 졸리운_곰 2024.01.28 1
120 [React Native] 리액트 네이티브 안드로이드 기기 빌드 에러 졸리운_곰 2023.12.17 1
119 [android studio] 안드로이드 앱 내부 배포 시 Play프로텍트에 인증받고 배포하기 file 졸리운_곰 2023.03.23 3
118 [android studio] [Java][Android] 안드로이드 다국어 지원 file 졸리운_곰 2023.03.21 5
117 [android studio] [안드로이드 스튜디오] 다국어 지원 strings.xml 파일 생성 방법 file 졸리운_곰 2023.03.21 12
116 [android studio] 구글 플레이 스토어 등록 어떻게? 2편 - 키스토어 생성과 릴리즈 빌드 하기 file 졸리운_곰 2023.03.21 5
115 [android studio] 구글 플레이 스토어 등록 어떻게? 1편 - 준비해야 할 것들 졸리운_곰 2023.03.21 5
114 [android studio] 웹페이지를 apk 앱으로 | 쉽게 따라하는 웹앱 만들기 file 졸리운_곰 2023.03.21 11
113 [android studio] 안드로이드 아이콘이 2개 생성될 때 졸리운_곰 2023.03.21 2
112 [android studio] Convert Any Website to Android App using Android Studio file 졸리운_곰 2023.03.18 1
111 [android studio] How to Convert Any Website to Android App in Android Studio? file 졸리운_곰 2023.03.18 5
110 [phonegap][cordova] [안드로이드] 코도바 앱(App) 개발 환경 세팅 file 졸리운_곰 2023.02.05 10
109 [android studio] 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8. file 졸리운_곰 2022.11.17 4
» [android sdk] 안드로이드에서 JWT 사용하기 졸리운_곰 2022.07.15 22
107 [Android Studio] Android Native App 에서 mysql , php 연결 : PHP MySQL REST API for Android file 졸리운_곰 2021.12.02 104
106 Android PHP MySQL 예제 - 데이터베이스에서 데이터를 JSON 형식으로 가져오기 file 졸리운_곰 2021.07.24 208
105 Android PHP MySQL 예제 - 데이터베이스 질의(query) 결과 출력하기 file 졸리운_곰 2021.07.24 539
104 [android] 안드로이드에서 mysql 데이터베이스 입력, 접속 / Android PHP MySQL 예제 - 데이터베이스에 데이터 입력하기 file 졸리운_곰 2021.07.24 117
103 Android 에서 Opencv 설치하고 간단한 예제 실행해보기!! file 졸리운_곰 2020.10.31 333
102 안드로이드 나인 패치(9-Patch) 이미지 버튼. (Android Nine-Patch Image Button) file 졸리운_곰 2020.10.10 147
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED