[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

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
37 Android WebView javascriptInterface 사용하기 file 졸리운_곰 2018.03.26 497
36 안드로이드 에서 JSON 읽어오기 (JSON parser) file 가을의곰 2017.06.18 709
35 Android Basic JSOUP Tutorial file 졸리운_곰 2017.03.27 265
34 [Android] 안드로이드 웹페이지 파싱하기 - jsoup 이용하기 file 졸리운_곰 2017.03.27 487
33 Android에서 jsoup를이용하여 HTML 파서(Parser) file 졸리운_곰 2017.03.27 673
32 윈도우즈에서 IntelliJ IDEA + android 개발환경 만들기 file 졸리운_곰 2016.12.05 322
31 단말기 내부에 폴더 및 txt파일 생성하기 file 졸리운_곰 2016.05.01 76
30 wifi 연결시 알림 android source 졸리운_곰 2016.05.01 169
29 How to use Broadcast Receiver in Android – Send and Receive SMS file 졸리운_곰 2016.05.01 153
28 [Android] Layout XML - layout_weight file 졸리운_곰 2016.04.30 23311
27 레이아웃이란 무엇일까요? 졸리운_곰 2016.04.30 107
26 안드로이드 네트워크/쓰레드 프로그래밍 예제 - HTTP file 졸리운_곰 2016.04.30 244
25 안드로이드 와이파이 연결시 준비된 코드 실행 졸리운_곰 2016.04.30 315
24 Broadcast Receiver로 문자(SMS) 수신해보자 file 졸리운_곰 2016.04.29 666
23 How do you get the Android's primary e-mail address (or a list of e-mail addresses)? 졸리운_곰 2016.04.29 132
22 안드로이드/Android 액티비티(Activity) 투명 처리 하기 file 졸리운_곰 2016.04.14 102
21 Audio Capture 졸리운_곰 2016.04.08 109
20 [안드로이드] 앱이 파일을 읽고 쓰는 위치 졸리운_곰 2016.03.24 755
19 안드로이드 네트워크 연결 상태 확인 졸리운_곰 2016.03.23 334
18 안드로이드 > 네트워크 연결 상태를 확인하는 ConnectivityManager 졸리운_곰 2016.03.23 544
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED