https://sodock00.tistory.com/15
JWT(Json Web Token)에 대한 전반적인 내용은 위에 정리해두었다.
오늘은 실전편, 실제 안드로이드에서 JWT를 사용하기 이다.
다시 한번 JWT 사용과정을 살펴보자!!
* 실제 적용한 부분으로 조금씩 내용 추가할 예정
JWT 사용과정
1) 사용자가 id와 pw를 입력해서 로그인 시도
2) 서버에서 요청을 확인하고 secret key를 통해 Access token 발급
3) JWT 토큰을 클라이언트에 전달 (=저장소에 저장)
4) 클라이언트에서 API를 요청할 때, 클라이언트가 헤더 부분에 Access token을 담아서 서버에 요청
5) 서버는 JWT signature을 확인하고 Payload로부터 사용자 정보를 확인해 데이터를 반환
JWT 구조
Shared Preference 사용방법
* Shared Preference?
: 간단한 데이터들을 DB에 저장하기 좀 그럴 때, Shared Preference를 통해 데이터를 관리할 수 있다.
: 앱의 어디서든 전역적으로 사용하기 때문에 싱글톤 패턴을 사용하는 것이 좋다.
1. preference class 생성 후 preference 인스턴스를 생성한다.
2. get set 메서드를 통해 토큰을 가져오는 식으로 관리한다.
3. 가장 먼저 실행되기 위해 Application을 상속받은 class에서 onCreate 전에 초기화한다.
(이때 효율적인 자원관리를 위해 싱글톤 패턴을 사용한다)
* 싱글톤 패턴?
: 해당 클래스에 한 개의 인스턴스만을 갖게 하고 전역 범위에서 이 인스턴스에 접근할 수 있도록 사용하는 패턴
: 한 개의 객체를 여러 개의 클래스가 공유해서 쓰는 방법 구현할 때 사용 > 메모리 낭비 방지 가능
: class 생성시 kindTab에 singleton을 선택해서 사용한다.
4. manifast에서 application을 등록한다.
5. Shared Preference에서 토큰을 저장하고 가져올 수 있다.
OkHttp3 Interceptor 사용방법
인증정보를 암호화하여 url 형식으로 전달해주는 토큰인 JWT
이 토큰이라는 것은 만료시간이 있어서 만료된 토큰은 더 이상 사용하지 못한다.
( 만료된 토큰으로 서버와 통신하면 401 error가 뜬다)
따라서 만료된 토큰은 새로은 access token을 갱신받아 사용해야 한다.
이때 안드로이드에서 토큰 갱신하는 것을 okhttp3을 통해 구현할 수 있다.
1. Interceptor 생성
interceptor을 상속받아서 intercept 메서드를 구현한다
chain에 "Authorization"이라는 key와 prefs의 값을 가진 헤더를 붗이고 리턴한다.
(헤더에 Authorization(인가)을 추가하면 인증된 사용자만 정보를 취득할 수 있다 > retrofit2로도 구현 가능)
2. Client 생성
1번에서 만든 interceptor을 바탕으로 okHttpClient를 생성한다.
3. Client와 retrofit의 인스턴스를 연결
retrofit의 인스턴스를 생성할 때 client를 연결한다.
참고한 블로그
https://leveloper.tistory.com/133
https://lktprogrammer.tistory.com/187
http://throughkim.kr/2017/03/14/Jwt/
https://akaisun.tistory.com/73
'안드로이드' 카테고리의 다른 글
[Android/안드로이드] 네이버 로그인 서비스 구현하기 (0) | 2022.03.03 |
---|---|
[안드로이드/Retrofit2] No type arguments expected for class Call (0) | 2022.02.06 |
[Android] Navigation(네비게이션) 사용법 (0) | 2022.01.31 |
[UMC] 8주차 - 사용자 인증 방식(oAuth/Cookie/JWT) (0) | 2022.01.05 |
[UMC] 7주차 - RoomDB (0) | 2022.01.05 |