[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) 헤더를 붙인 뒤 다시 전송해줍니다.

사용방법

  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

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
» [android sdk] 안드로이드에서 JWT 사용하기 졸리운_곰 2022.07.15 0
107 [Android Studio] Android Native App 에서 mysql , php 연결 : PHP MySQL REST API for Android file 졸리운_곰 2021.12.02 15
106 Android PHP MySQL 예제 - 데이터베이스에서 데이터를 JSON 형식으로 가져오기 file 졸리운_곰 2021.07.24 79
105 Android PHP MySQL 예제 - 데이터베이스 질의(query) 결과 출력하기 file 졸리운_곰 2021.07.24 382
104 [android] 안드로이드에서 mysql 데이터베이스 입력, 접속 / Android PHP MySQL 예제 - 데이터베이스에 데이터 입력하기 file 졸리운_곰 2021.07.24 14
103 Android 에서 Opencv 설치하고 간단한 예제 실행해보기!! file 졸리운_곰 2020.10.31 181
102 안드로이드 나인 패치(9-Patch) 이미지 버튼. (Android Nine-Patch Image Button) file 졸리운_곰 2020.10.10 51
101 나인패치(Nine Patch) 이미지란? file 졸리운_곰 2020.10.10 40
100 Python으로 안드로이드 앱 만들기 졸리운_곰 2020.09.30 598
99 [Android] Fragment 를 이용한 탭 만들기 file 졸리운_곰 2020.09.19 40
98 빠르게배우는 안드로이드 Fragment-4(Fragment간 에 데이터전달) file 졸리운_곰 2020.09.19 32
97 빠르게배우는 안드로이드 Fragment-3(Fragment기초 실습) file 졸리운_곰 2020.09.19 40
96 빠르게배우는 안드로이드 Fragment-2(Activity-> Fragment로 쉽게 변경) 졸리운_곰 2020.09.19 28
95 빠르게배우는 안드로이드 Fragment -1 (배경) file 졸리운_곰 2020.09.19 35
94 안드로이드 스튜디오 - 새로 생성한 Activity Class를 쉽게 Manifest에 등록하기. file 졸리운_곰 2020.08.08 48
93 Android Studio Build시 failed linking references 해결방법 file 졸리운_곰 2020.05.05 353
92 [안드로이드 스튜디오] COULD NOT FIND COM.ANDROID.TOOLS.BUILD:GRADLE:3.0.0-BETA6 file 졸리운_곰 2020.05.05 35
91 Android Sync SQLite Database with Server using PHP and MySQL file 졸리운_곰 2019.02.25 5302
90 안드로이드의 MVC, MVP, MVVM 종합 안내서 file 졸리운_곰 2019.01.06 239
89 Getting Started: WebView-based Applications for Web Developers file 졸리운_곰 2018.09.03 248
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED