Я создаю мобильное приложение для нескольких платформ (iOS, Android, PWA (Web)) и собираю свой бэкэнд с безсерверной средой на AWS Lambda, используя API Gateway и DynamoDb.
Мои последниеЦель состоит в том, чтобы добавить учетную запись пользователя с помощью AWS Cognito, чтобы мои пользователи могли войти в систему, используя свой адрес электронной почты и пароль, или войти через Facebook.Я читаю несколько тем, учебных пособий и официальную документацию AWS, но я в замешательстве из-за огромного количества различной информации.
Я хочу интегрировать авторизованные конечные точки API, которые могут вызываться только при входе пользователя в систему.
Поэтому мой первый вопрос:
1) Стоит ли мне использовать пулы пользователей AWS Cognito или пулы идентификации AWS Cognito?
Я также прочитал этот вопрос для пользователяпулы, вы можете использовать только размещенный пользовательский интерфейс для входа в систему, что не возможно для моего приложения.Я хочу оформить свою собственную страницу входа в систему.
Поскольку я не смог найти пример кода для интеграции на стороне клиента, на данный момент я пошел с удостоверениями Pools и создал конечную точку в моем serverless.yml, в которой указанследующее:
functions:
xxx-auth:
handler: endpoints/xxx-auth.execute
events:
- http:
path: xxx-auth
method: put
cors: true
integration: lambda
authorizer: aws_iam
Итак, мой второй вопрос:
2) Как правильно интегрировать авторизацию для моего пула идентификации Cognito или пула пользователей?
Из другого потока я прочитал, что есть возможность сгенерировать SDK для API, созданного на API Gateway, который обрабатывает процедуры подписи для вас запроса.Когда я попытался сделать это в своем приложении для iOS, сначала войдите в систему, используя следующий код:
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .EUCentral1 ,
identityPoolId:"eu-central-1:XXXXXXXX" ,
identityProviderManager: CustomIdentityProvider(tokens: ["graph.facebook.com": FBSDKAccessToken.current().tokenString]))
let configuration = AWSServiceConfiguration(region: .EUCentral1, credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
, а затем используйте следующий созданный код для отправки запроса PUT:
public func XXXPut() -> AWSTask<AnyObject> {
let headerParameters = [
"Content-Type": "application/json",
"Accept": "application/json",
]
let queryParameters:[String:Any] = [:]
let pathParameters:[String:Any] = [:]
return self.invokeHTTPRequest("PUT", urlString: "/XXX", pathParameters: pathParameters, queryParameters: queryParameters, headerParameters: headerParameters, body: nil, responseClass: nil)
}
Но я не вижу ни одного кода, который подписывает HTTP-запрос.Поэтому третий вопрос:
3) Как создать SDK, который должным образом отправляет подписанный HTTP-запрос на серверную часть моего шлюза API?
Я тоже пробовал то же самоедля пользовательских пулов Cognito, используя простой заголовок «Авторизация», но не смог найти способ получения соответствующего токена авторизации в приложении iOS без использования какого-либо размещенного пользовательского интерфейса.
Было бы очень любезно, есликто-то может объяснить мне эти джунгли.