[iOS - swift] 6. 서버 - OAuth, Key Chain, 로그인 관리 토큰
1. OAuth란?
- Third-party application의 인증 권한부여 및 관리를 위해서 사용 (특정 쇼핑몰 회원가입시, kakao톡아이디 또는 naver아이디로 회원가입할 수 있는 제 3자의 회원가입 정보를 이용할 수 있는 것)
- 대부분의 서비스는 인증(Authentication)과 권환부여(Authorization)로 구성, 대표적인 방법이 OAuth2.0방법 (Facebook, Google, Twitter들도 사용)
- OAuth기반 서버에서 인증이 필요한 API를 호출할 떄에는 이 토큰을 반드시 이용

핵심은 Clinet쪽에서 Server의 Token을 받으면, 이 Token을 가지고 다시 Server에 요청하여 원하는 자료를 획들 할 수 있는 논리 흐름
* 각 actor에(그림에서 오른쪽 역할들) 대한 정보는 여기에서 확인
2. Token
1) Access Token
- 요청 절차를 정상적으로 종료한 클라이언트에게 발급 (시간제한이 존재)
2) Refresh Token
- 시간제한이 존재하지 않는 Token이며, "Resurce Server"가 아닌 "Authorization Server"에서만 사용가능
3. Key Chain
1) 개념
- Token은 중요한 요소이기 때문에 저장소 암호화되는 장소가 필요, 이곳이 apple의 "Key Chain"장소
(아이클라우드의 로그인 정보, 와이파이의 패스워드, 사파리 로그인 패스워드 자동저장 모두 "Key Chain"에 저장)

2) 특성
- "Key Chain"의 위치는 Sandbox*이므로 앱을 삭제해도 "Key Chain"정보는 삭제되지 않음
- "Key Chain"은 잠금 기능이 있고 잠그면 해제하기 전까지 저장된 데이터에 접근 불가, 그러나 iOS에서는 기기의 잠금이 해제되는 순간 "Key Chain"의 잠금도 함께 해제
*Sandbox : 외부에서 받은 파일을 그자리에서 실해않고 보호된 영역에서 실행시켜 봄으로써 잘못된 파일과 프로그램이 내부시스템에 악영향을 주는 것을 방지하는 기술
4. Key Chain의 구성요소
1) Keychain Item : 키 체인에 저장되는 데이터
2) Item Class : 저장할 데이터의 종류
ID/PW : kSecClassInternetPassword
일반 pw설정 : kSecClassGenericPassword
kSecClassInternetPassword - Security | Apple Developer Documentation
The value that indicates an Internet password item.
developer.apple.com
3) Attributes : "Item Class"의 속성
kSecClassGenericPassword의 속성은,
- 공개키*: kSecAttrService
- 개인키* : kSecAttrAccount
*공개키, 개인키 : 가장 기본적인 암호&복호화 방식은 대칭키(암호화, 복호화 키가 모두 값은 것)인데 이것의 단점을 보완하여,
모두가 공유하고 있는 공개적인 암호화 키(공개키)와 자신만이 가지고 있는 키(개인키)로 나눈 것
* 더 자세한 정보는 다음 링크 참고