티스토리 뷰
[Swift/iOS] 애플 로그인 후 반환 값 ASAuthorizationAppleIDCredential From 공식문서
마들브라더 2023. 5. 6. 06:24애플 로그인을 구현한 후, 첫 로그인을 하면 애플 서버에는 유저가 해당 앱에 가입한 것처럼 설정되지만
(아이폰 기준, 설정 - Apple ID - 암호 및 보안 - Apple로 로그인 - Apple ID를 사용하는 앱에서 확인 가능)
서비스를 하고 있는 서버에도 유저 정보를 저장해야하기 때문에(가입) 서버로 값을 전달해줘야 한다
서버 쪽에서 어떻게 확인하는지 내가 서버개발자가 아니기 때문에 잘은 모르지만, 첫 로그인 시 확인할 수 있는
authorization.credential as? ASAuthorizationAppleIDCredential
값 중 identityToken과 authorizationCode를 서버로 전달해서 확인해야 한다
다른 포스팅에서는 userIdentifier, fullname이나 email 정도만을 언급하면서 끝나기 때문에 공식문서를 확인해서
ASAuthorizationAppleIDCredential 클래스에 있는 값들을 한번 살펴보려고 한다
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
print("fullName, ", appleIDCredential.fullName)
print("email, ", appleIDCredential.email)
}
}
애플 로그인에서 로그인이 성공했을 때, ASAuthorizationControllerDelegate의 didCompleteWithAuthorization 메서드에서 값들을 확인할 수 있다
얻을 수 있는 값들을 다 확인해 보자
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
print("// Identifying a User")
print("identityToken, ", appleIDCredential.identityToken)
print("authorizationCode, ", appleIDCredential.authorizationCode)
print("state, ", appleIDCredential.state)
print("user, ", appleIDCredential.user)
print("")
print("// Getting Contact Information")
print("authorizedScopes, ", appleIDCredential.authorizedScopes)
print("fullName, ", appleIDCredential.fullName)
print("email, ", appleIDCredential.email)
print("")
print("// Detecting User Characteristics")
print("realUserStatus, ", appleIDCredential.realUserStatus.rawValue)
}
}
애플 로그인 첫 성공 시 반환 값
애플 로그인에 처음 성공한다면 리턴 값은 다음과 같다
두 번째 이후로 로그인한다면 다음과 같다
이제 하나하나 살펴보자
identityToken
JSON Web Token으로서, 유저에 관한 정보를 안전하게 앱에 전달하기 위한 것
이게 무슨 말일까, 간단하게 설명하면 서버에서 유저 정보를 검증할 때 필요한 토큰이라고 볼 수 있다
인증할 때마다 다르게 값이 날아온다
authorizationCode
앱이 서버와 상호작용 하는 데 사용되는 토큰
identityToken과 같이 서버로 보내준 후, 서버는 애플서버로 유효성 검사를 하게 된다
짧은 시간만(short-lived) 유효함
state
credential을 생성하는 요청에 앱이 제공하는 임의의 String 값
인증 요청 시 생성되는 리퀘스트에 대한 상태정보를 포함하는 문자열이며, 인증 결과를 확인하고 상태 정보를 비교할 수 있다고 한다
(근데 nil이 계속 반환된다?)
user
인증된 유저의 고유한 identifier 값, 변경되지 않음
authorizedScopes
앱이 접근할 수 있는 사용자가 허락한 연락처 정보(라지만 빈값이 반환된다?)
fullName
유저의 이름(Apple ID에서 제공되는, 또는 Sign in with Apple UI에서 유저가 정한)
처음 로그인 시에만 확인할 수 있다, 이후에는 빈값 반환
유저의 이메일, 처음 로그인할 때 실제 이메일 주소 혹은 애플이 임의로 생성한 가상 이메일 주소
처음 로그인 시에만 확인할 수 있다, 이후에는 nil 반환
realUserStatus
Int값이 날아오는데, 2은 likelyReal 유저가 진짜 사람으로 나타남, 1은 unknown 시스템이 유저가 진짜 사람인지 아닌지 결정하지 못함, 0은 unsupported 사용자의 실재여부를 확인할 수 없음
(두 번째에는 1이 날아왔다..)
이후의 과정
처음 로그인한 순간만 이름과 이메일이 전달되니 이것을 클라이언트 앱에 저장하고,
id토큰과 auth코드를 서버로 보낸 후 리턴되는 access토큰과 refresh토큰을 클라이언트 앱에 저장한다 (이 부분은 서비스마다 다르다. 자세한 부분은 서버 개발자에게 물어보자...)
user 값은 ASAuthorizationAppleIDProvider의 getCredentialState 메서드의 인자로 사용할 수 있으므로 역시 저장한다
앱에서 애플 로그인 상태를 확인할 수 있는 메서드이다
예를 들면 사용자가 Apple ID 설정에서 Apple ID 사용 중단을 한다면, 앱에서 새로 로그인할 수 있도록 처리해 주기 위함이다
참조
https://developer.apple.com/documentation/authenticationservices/asauthorizationappleidcredential
https://labs.brandi.co.kr//2021/04/09/chosh.html
https://hyesunzzang.tistory.com/206
'programming > Swift' 카테고리의 다른 글
[Swift/iOS] KeyChain에 저장을 해보자 (0) | 2023.05.06 |
---|---|
[Swift/iOS] CoreData 사용하기(4) - 속성값 유무에 따른 데이터 저장, 속성의 optional 타입 (0) | 2023.05.06 |
[Swift/iOS] CoreData 사용하기(3) - 데이터 저장하기, 데이터 불러오기 기초 (0) | 2023.05.06 |
[Swift/iOS] CoreData 사용하기(2) - CoreData Stack 설정하기 From 공식문서 (0) | 2023.05.05 |
[Swift/iOS] CoreData 사용하기(1) - 프로젝트 중간에 추가하기, Entity 만들기 (0) | 2023.05.05 |
- Total
- Today
- Yesterday
- 캡쳐리스트
- identity Token
- ASAuthorizationAppleIDCredential
- 토큰저장
- 메모리 안정성
- autoclosure
- 디자인패턴
- Entity
- 클로저 강한 참조
- Delegate 패턴
- inout 파라미터 메모리 충돌
- unowned
- 클로저 축약
- 강한참조순환
- ios
- escaping closrue
- Core Data Stack
- 강한 참조 순환
- 자동클로저
- 회원가입
- core data
- context
- weak
- 클로저표현
- Persistent Container
- 클로저
- object
- SWIFT
- CoreData
- authorizationCode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |