안녕하세요 이번 포스팅에서는 JWT토큰과 JWT토큰 인증 구현을 보겠습니다
JWT
JSON Web Token (JWT)는 마이크로 서비스의 인증, 인가에 사용할 수 있는 서명된 JSON
사용자가 로그인을 하면 토큰을 주는데 서버가 유저를 인증하고 식별하기 위한 토큰 기반 인증 방법입니다.
----------------------------------------------------------------------------------------------------
1. 사용자가 로그인을 하고
2. 서버에서 토큰이 떨어지고
3. 토큰을 okHttp3 헤더에 , Authorization <- 키값으로 하고 추가 합니다
4. 토큰이 만료되면 서버에서 다시 토큰이 떨어지는데 교체해주면 됩니다 (이 부분은 이번 포스팅에서 진행하지 않습니다@)
토큰을 서버에서 받고 sharePreference혹은 다른 방법으로든 로컬에 저장했다는 가정하에
포스팅을 진행하겠습니다
https://jpointofviewntoe.tistory.com/32
1. 먼저 Application()을 상속받는 클래스를 하나 생성해줍니다.
- manifests 파일에 Application app name에 추가해주세요
저는 Common 클래스안에 Preferense를 모아둔 inner class 를 생성했습니다.
class App : Application() {
companion object{
lateinit var prefs: Common.PreferenceUtil
}
override fun onCreate() {
prefs=Common().PreferenceUtil(applicationContext)
super.onCreate()
}
}
2. 인터셉터를 만들어줍니다.
인터셉터는 Http 요청전에 토큰이 있다면 헤더에 추가해줍니다.
레트로핏 헤더에 어노테이션으로 추가하는 방법도 있지만
토큰과 같은 인증정보처럼 모든 요청의 헤더에 포함되어 있어야하는 정보들은 @Header 어노테이션으로 모든 API에 일일이 토큰 헤더를 붙이는 것은 코드의 중복도 심하고 관리하기도 번거로워 okHttp3 인터셉터를 활용하여 모든 api 요청에 자동으로 토큰을 셋팅해줍니다.
class AuthInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val requeset = chain.request().newBuilder()
.addHeader("Authorization", App.prefs.getToken() ?: "")
.build()
return chain.proceed(requeset)
}
}
3. 마지막으로 OkHttpClient.Builder를 사용하여 만들어진 request를 서버로 요청할 클라이언트를 생성해줍니다.
-addInterceptor에 AuthInterceptor()를 추가해줍니다. 토큰이 생성되면 알아서 넣어줄겁니다!
그리고 Retrofit 빌더를 사용하여 셋팅을 마무리해주시면 됩니다.
val client = OkHttpClient.Builder()
.addInterceptor(headerInterceptor)
.addInterceptor(httpLoggingInterceptor)
.addInterceptor(AuthInterceptor())
.build()
return Retrofit.Builder()
.baseUrl(Common.modifyUrlHost())
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
.create(ApiService::class.java)
이해 안가는 부분이나 제 코드에 문제가 있다면 댓글 부탁드립니다 !
'개발노트 > Android' 카테고리의 다른 글
[Kotlin] ListView 만들기 (0) | 2023.02.20 |
---|---|
[Kotlin] Android 11 권한 이슈 처리 (0) | 2023.02.20 |
[Kotlin] java script Alert & Confirm 띄우기 (0) | 2023.02.19 |
[Kotlin]JavaScript < ㅡ > Native 통신 (0) | 2023.02.17 |
[kotlin] KaKao Link Share, 카카오톡 링크 공유하기 - 2 (0) | 2023.02.17 |
댓글