Добавление входа пользователя в мобильное приложение на серверном бэкенде в AWS - PullRequest
0 голосов
/ 10 февраля 2019

Я создаю мобильное приложение для нескольких платформ (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 без использования какого-либо размещенного пользовательского интерфейса.

Было бы очень любезно, есликто-то может объяснить мне эти джунгли.

1 Ответ

0 голосов
/ 18 февраля 2019

Я понял сам:

1) Это зависит.Сейчас я использую комбинацию обоих по следующей причине: для входа в Facebook мы используем Cognito Identity Pool, поскольку Cognito UserPool не поддерживает вход в Facebook вне размещенного пользовательского интерфейса.Для регистрации по электронной почте и входа в систему мы используем UserPool в Cognito Identity Pool.

2) Отправленный мною фрагмент кода был правильным.

3) Фрагмент кода также был верным.Моя ошибка заключалась в том, что я неправильно отображал и проверял ответ моего API и поэтому думал, что запрос не был авторизован, но он был.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...