2016-04-04 4 views
3

Я создаю серверную службу, и я использую AWS Cognito. Прямо сейчас, я использую свои удостоверения подлинности для разработчиков. Итак, мой пользователь может войти в систему, используя мою собственную систему. Эта часть выполнена.Проверка подлинности пользователя с помощью cognito

Однако у меня возникли проблемы с аутентификацией пользователя после входа в систему. Предположим, что пользователь отправил мне запрос на доступ к некоторым частным функциям моего API. Как я могу идентифицировать и аутентифицировать этого пользователя?

Если я использую facebook как поставщик логина, я могу выполнить заголовок http с его идентификатором Cognito и его токеном доступа к facebook. Затем я могу проверить его подлинность, пытаясь получить токен Cognito, используя функцию GetOpenIdTokenRequest.

у меня будет что-то вроде

providerTokens.put("graph.facebook.com", "xxxxxxxxxxxx"); 
tokenRequest.setLogins(providerTokens); 

AmazonCognitoIdentityClient identityClient = new AmazonCognitoIdentityClient(); 
     identityClient.setRegion(RegionUtils.getRegion(Configuration.REGION)); 
     GetOpenIdTokenResult tokenResp = identityClient.getOpenIdToken(tokenRequest); 

Однако, я не использую Facebook.

Итак, я попробовал немного что-то вроде этого

providerTokens.put("customdeveloper.authentication.com", "xxxxxxxxxxxx"); 
tokenRequest.setLogins(providerTokens); 

Получение ошибки, что мой аутентификации разработчик не является публичной поставщик.

Я совершенно смущен, если я иду в правильном направлении. Я в основном хочу аутентифицировать своего пользователя. Нечто похожее на oauth2, где я получаю токен, может проверить идентификацию пользователя.

Как правильно это сделать, используя Cognito?

ответ

1

Документация на Cognito довольно расплывчата на стороне сервера, однако я выясняю способ ее выполнения.

Таким образом, вам необходимо передать идентификатор удостоверения личности и токен Cognito на сервер. Затем на сервере вы делаете что-то вроде этого:

// Create the request object    
     Map providerTokens = new HashMap(); 
     providerTokens.put("cognito-identity.amazonaws.com", "auidhashaisdhals"); 
     tokenRequest.setLogins(providerTokens); 

     AmazonCognitoIdentityClient identityClient = new AmazonCognitoIdentityClient(); 
     identityClient.setRegion(RegionUtils.getRegion(Configuration.REGION)); 
     GetCredentialsForIdentityRequest request = new GetCredentialsForIdentityRequest(); 
     request.withLogins(providerTokens); 
     request.setIdentityId("us-east-1:XXXXX-9ac6-YYYY-ac07-ZZZZZZZZZZZZ"); 
     GetCredentialsForIdentityResult tokenResp = identityClient.getCredentialsForIdentity(request); 

Если у вас есть право Cognito токен, то вы должны быть в состоянии получить идентификацию и аутентификацию. Если токен, если он недействителен, то вы не аутентифицируете своего пользователя.

Amazon генерирует исключение, если токен недействителен, поэтому вы можете поймать и вернуть ошибку 404.

2

Да, используя идентификатор идентификации и токен Cognito, вы можете вызвать getCredentialsForIdentity и определить, что токен действителен и принадлежит этому идентификатору.

Затем вы можете использовать эти учетные данные для вызова различных сервисов в качестве этого пользователя.

Другим варианта поставить логику сервера конца за API шлюза: http://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html

Тогда пользователи получат сторону учетных данных клиента, а также совершать звонки, используя эти учетные данные API шлюз, который фронты вашей серверной логики.

Смежные вопросы