AWS Cognito UserPool 및 Identity를 사용한 iOS 앱 인증

3541 단어 iOSSwiftcognitoAWS
awslabs의 Objective-C 샘플 을 참고로, Swift판을 만들었습니다.



UserPool에서 사용자 인증을 수행하고 UserPool을 인증 공급자로 Cognito Identity에서 Credential을 얻는 흐름입니다.
UserPool 덕분에 인증 서버조차도 구현할 필요가 없어지고 점점 서버리스 개발이 가능해지고 있습니다.

참고로 한 사이트



UserPool에 대해서는 아직 그다지 기사도 많지 않고, AWS 공식 문서가 의지였습니다.

언어는 Objective-C이지만 awslabs 샘플은 매우 유용합니다.

앱 실행 방법



1.UserPool 만들기

미국 동부 지역(us-east-1)에서 UserPool을 만듭니다. 요전날 도쿄 리전(ap-northeast-1)도 이용 가능하게 되었습니다만, SDK의 버그? 그래도 잘 작동하지 않았습니다.
AWS SDK 버전 2.4.5까지는 미국 동부 리전(us-east-1)이 하드 코드되어 있었던 것 같아서 도쿄 리전(ap-northeast-1)에서는 동작하지 않았지만 2.4.7로 업데이트 그런 다음 작동합니다.
관련 Issue는 다음과 같습니다.
htps : // 기주 b. 코 m / 아 ws / 아 ws-sdk 이오 s / 이스에 s / 447

2.IdentityPool 만들기

이곳은 도쿄 리전에서 작성합니다.

3.UserPool, IdentityPool의 정보를 앱에 작성
Constants.swift 에 필요한 정수를 정리하고 있습니다. 여기에 정보를 기술하면 앱이 실행할 수 있게 되어 있습니다.
static let COGNITO_IDENTITY_USER_POOL_ID = "YOUR_USER_POOL_ID"
static let COGNITO_IDENTITY_USER_POOL_APP_CLIENT_ID = "YOUR_USER_POOL_APP_CLIENT_ID"
static let COGNITO_IDENTITY_USER_POOL_APP_CLIENT_SECRET = "YOUR_USER_POOL_APP_CLIENT_SECRET"
static let COGNITO_IDENTITY_USER_POOL_KEY = "CognitoUserPool"
static let COGNITO_IDENTITY_POOL_ID = "YOUR_IDENTITY_POOL_ID"

4. 종속 라이브러리 설치

pod 명령으로 설치합시다.
$ pod install

코드 해설



간단하게 포인트만, 순서를 따라 설명합니다.
덧붙여서 로그인 기능 밖에 없기 때문에 사전에 UserPool에 유저를 작성해 둘 필요가 있습니다. .

WelcomeViewController



본 앱의 메인 화면입니다. refresh 메소드가 UserPool과 통신을 시도하고 있으며 여기에서 사용자가 인증되지 않은 경우 로그인 화면이 표시됩니다.
로그인이 완료되면 Welcome Username이라는 메시지가 표시됩니다.

AppDelegate


AWSCognitoIdentityInteractiveAuthenticationDelegate 프로토콜을 적용하고 startPasswordAuthentication 메서드를 구현합니다.
startPasswordAuthentication 메서드는 사용자가 인증되지 않은 경우 호출되며 LoginViewController를 시작합니다.

LoginViewController


AWSCognitoIdentityPasswordAuthentication 프로토콜을 적용하고 getPasswordAuthenticationDetails:passwordAuthenticationCompletionSource:didCompletePasswordAuthenticationStepWithError: 메서드를 구현합니다.
getPasswordAuthenticationDetails:passwordAuthenticationCompletionSource: 메소드에서는 passwordAuthenticationCompletionSource 를 받을 수 있습니다. 이 오브젝트에는 UserPool과 통신하여 로그인하는 태스크가 들어 있습니다.

이 타이밍에 로그인 화면이 표시되고 로그인 버튼을 클릭하면 loginTapped: 메소드가 실행됩니다. 이 중 self.passwordAuthenticationCompletion?.setResult(result) 로 로그인 작업을 실행합니다. result에는 로그인 화면에서 얻은 사용자 이름과 암호가 들어 있습니다.

로그인이 완료되면 didCompletePasswordAuthenticationStepWithError: 메소드가 실행됩니다. 여기에서는 로그인 태스크가 에러이면 경고를 표시하고, 로그인 성공하면 로그인 화면을 닫는다는 처리를 합니다.

마지막으로 WelcomeViewController로 돌아가서 로그인 한 사용자의 이름으로 Welcome Username이라는 메시지가 표시됩니다.

AwsClientManager



Cognito 주위의 처리는 이 싱글톤 클래스에 갇혀 있습니다.

조금이라도 여러분의 도움이 되면 다행입니다^^

좋은 웹페이지 즐겨찾기