【问题标题】:AWS Api Gateway and Cognito on Android - Error 401Android 上的 AWS Api Gateway 和 Cognito - 错误 401
【发布时间】:2017-06-27 22:59:32
【问题描述】:

我在将 Cognito 与 ApiGateway 集成时遇到问题。 首先我用 Cognito 登录,那里没有问题,我得到了所有的令牌。 然后我必须调用 API Gateway。我正在使用自动生成的 Android SDK。 我在这里遵循示例:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-generate-sdk-android.html 但我总是遇到同样的错误。

CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                    context,
                    CognitoConstants.IDENTITY_POOL_ID,
                    CognitoConstants.REGION);

String token = cognitoUserSession.getIdToken().getJWTToken();

Map<String, String> logins = new HashMap<>();
            logins.put(CognitoConstants.LOGIN_MAP_KEY, token);
            credentialsProvider.setLogins(logins);

ApiClientFactory factory = new ApiClientFactory()
                    .credentialsProvider(credentialsProvider);

client = factory.build(ExampleAPIClient.class);
client.exampleApi1AccountsGet();

结果是:

ApiClientException com.amazonaws.mobileconnectors.apigateway.ApiClientException: {"message":"Unauthorized"}
(Service: BancarAPIClient; Status Code: 401; Error Code: null; Request ID: 3679cd4b-eefc-11e6-9d00-f99040a8ed67)

【问题讨论】:

    标签: android amazon-web-services aws-api-gateway aws-cognito


    【解决方案1】:

    您拥有的 Android 代码从 Cognito 身份池获取凭据,这与 Cognito 用户池不同。

    我不确定您要使用哪一个,但如果 Android 代码正确并且您想通过 Twitter/FB/等进行登录。 (即身份池),您需要将 API 网关方法上的 AuthorizationType 设置为 AWS_IAM。看起来 API 可能设置了一个 Cognito 授权器,用于用户池功能。

    【讨论】:

    • 谢谢。你是对的,我正在为 Cognito 身份池设置凭据。实际上,我只需要使用 UserPool 令牌设置石南花,但我不知道如何设置,因为生成的 SDK 不是很灵活。原来是后端有问题,配置未命中。修复后,生成的 SDK 在方法 (@Parameter( name = "Authorization", location = "header") 中添加了这个参数,瞧!
    猜你喜欢
    • 2017-12-30
    • 2018-12-16
    • 2017-12-11
    • 2016-08-20
    • 2023-02-09
    • 2016-09-06
    • 2017-05-29
    • 1970-01-01
    • 2022-12-30
    相关资源
    最近更新 更多