Android
쿠키로 Auth인증하는 방법 (Interceptor 첨부)
그란.
2022. 2. 12. 18:13
통신할때 Auth인증하는 방법중에 쿠키에 (헤더에) 인증값을 넣어 통신하는 방법
로그인또는 회원가입했을때 Response Header에
set-cookie
해당 키값을 찾아 value 를 저장해놓고 ( SharedPreferences )
Auth가 필요한 통신을 할때 저장된 value를 Request Header에 넣어 통신하는 방법
Retrofit Interceptor 첨부
internal class AuthInterceptor @Inject constructor(
private val sessionProvider: SessionProvider
) : Interceptor {
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val response = this.doRequest(chain)
if (response.code == HttpURLConnection.HTTP_UNAUTHORIZED) {
sessionProvider.logout()
return response
}
//value 값중 필요한 값만 가져오기
response.headers(HEADER_RESPONSE_COOKIE).takeIf { it.isNotEmpty() }?.let { cookies ->
val sid = cookies.first().substringBefore(";").substringAfter("=")
sessionProvider.updateAccessToken(sid)
}
return response
}
@Throws(IOException::class)
private fun doRequest(chain: Interceptor.Chain): Response {
val request = chain.request()
val cookieSid = sessionProvider.cookieSid
if (cookieSid != null) {
return chain.proceed(
request
.newBuilder()
.addHeader(HEADER_REQUEST_COOKIE, "$SID_PREFIX$cookieSid")
.build()
)
}
return chain.proceed(request)
}
companion object {
private const val HEADER_RESPONSE_COOKIE = "set-cookie"
private const val HEADER_REQUEST_COOKIE = "Cookie"
private const val SID_PREFIX = "xxx.sid=" // 서버 설정에 따라 다를 수 있음
}
}