使用cognito验证用户身份

时间:2016-04-04 22:38:11

标签: authentication amazon-cognito

我正在创建一个后端服务,而我正在使用AWS Cognito。 现在,我正在使用我的开发人员身份验证身份。 所以,我的用户可以使用我自己的系统登录。这部分已经完成。

但是,我在登录后验证用户时遇到问题。假设用户向我发送访问我的API的某些私有函数的请求。如何识别和验证此用户?

如果我使用Facebook作为登录提供商,我可以使用他的Cognito ID和他的facebook访问令牌来实现http标头。然后,我可以验证他,尝试使用GetOpenIdTokenRequest函数获取Cognito令牌。

我会有像

这样的东西
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的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

是的,使用身份ID和Cognito令牌,您可以调用getCredentialsForIdentity并确定令牌有效并且属于该身份。

然后,您可以使用这些凭据以该用户身份调用不同的服务。

另一种选择是将后端服务器逻辑放在API网关之后: http://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html

然后,您的用户将获得客户端的凭据,并使用这些凭据进行调用,以支持服务器端逻辑的API网关。

答案 1 :(得分:1)

Cognito文档在服务器端非常模糊,但我找到了一种方法。

基本上,您需要将身份ID和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错误。