1

Имея проблему с помощью Cognito и API шлюза доступа в REST API,Android AWS APIGateway Authentication HttpURLConnection

Я не могу за жизнь мне найти простой пример того, как назвать обеспеченного REST API на нашем сервере AWS ,

Я называю

CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
        ProfileViewActivity.this, // get the context for the current activity 
        AMAZON_COGNITO_IDENTITY_POOL_ID, // your identity pool id 
        Regions.US_EAST_1 //Region 
      ); 

, а затем попытаться сделать вызов к нашему серверу, который является частью этого пула. Я продолжаю возвращаться «Запрещено».

Что делать с полномочиямиProvider в заголовках HttpURLConnection?

ОБНОВЛЕНО:

Ok, используя APIGateWay правильный путь с AWS SDK сгенерированного однако не знаете, как изменить сгенерированный файл:

private class MyAsyncTask extends AsyncTask<String, Void, String> { 
    private TextView textView; 

    public MyAsyncTask() { 
    } 

    @Override 
    protected String doInBackground(String... strings) { 
     AWSCredentialsProvider credenetialsProvider = new CognitoCachingCredentialsProvider(
       ProfileViewActivity.this,   // activity context 
       AMAZON_COGNITO_IDENTITY_POOL_ID, // Cognito identity pool id 
       Regions.US_EAST_1 // region of Cognito identity pool 
     ); 

     ApiClientFactory factory = new ApiClientFactory() 
       .credentialsProvider(credenetialsProvider) 
       .region("us-east-1") 
       .endpoint("https://myendpoint") 
       .apiKey("xxxxxxxxxxxxxxxxxxxxxxx"); 


     // MyClient is the AWS Android SDK Generated class 

      final MyClient client = factory.build(MyClient.class); 

     client.feedGet(); 

     String str = client.testGet().toString(); 


     Log.d("###", "here after test" +client.testGet().toString()); 


     return "DONE"; 
    } 

    @Override 
    protected void onPostExecute(String temp) { 
     Log.d("####", "onPostExecute"); 
    } 
} 

, а затем

private class MyAsyncTask extends AsyncTask<String, Void, String> { 
    private TextView textView; 

    public MyAsyncTask() { 
    } 

    @Override 
    protected String doInBackground(String... strings) { 
     AWSCredentialsProvider credenetialsProvider = new CognitoCachingCredentialsProvider(
       ProfileViewActivity.this,   // activity context 
       AMAZON_COGNITO_IDENTITY_POOL_ID, // Cognito identity pool id 
       Regions.US_EAST_1 // region of Cognito identity pool 
     ); 

     ApiClientFactory factory = new ApiClientFactory() 
       .credentialsProvider(credenetialsProvider) 
       .region("us-east-1") 
       .endpoint("https://myendpoint") 
       .apiKey("xxxxxxxxxxxxxxxxxxxxxxx"); 


     // MyClient is the AWS Android SDK Generated class 

      final MyClient client = factory.build(MyClient.class); 

     client.feedGet(); 

     String str = client.testGet().toString(); 


     Log.d("###", "here after test" +client.testGet().toString()); 


     return "DONE"; 
    } 

    @Override 
    protected void onPostExecute(String temp) { 
     Log.d("####", "onPostExecute"); 
    } 
} 

=== ====== MyClient.java - AWS Android SDK Сгенерированный файл

@com.amazonaws.mobileconnectors.apigateway.annotation.Service(endpoint = https:myaws_server) 
public interface MyClient { 
    @com.amazonaws.mobileconnectors.apigateway.annotation.Operation(path = \"/test\", method = "GET") 
    Empty testGet(); 
+0

Вы используете сгенерированный Android API шлюза SDK? В этом случае вы должны иметь возможность создать экземпляр нового клиента шлюза API, используя поставщик учетных данных из Cognito, и эти запросы должны работать. Это может помочь, если вы поделились кодом, в котором вы используете клиент шлюза API. –

+0

Я обновил вопрос с помощью кода, который я использую, - изменил его на API Gateway, но не смог с ошибкой прокси – justdan0227

+0

Здравствуйте. Получили ли вы успех? Я также сталкиваюсь с тем же вопросом – Krishna

ответ

2

Если вы используете AWS API Gateway, вы можете использовать его самостоятельно, не используя AWS Cognito. AWS API Gateway - это служба HTTP, как прокси-сервер для вашего сервера, или шлюз для вашей функции AWMS Lambda.

aws api gateway

+0

Спасибо @ cenxui-lin, однако, когда я попробовал, что получаю «Не могу оценить $ Proxy1.toString() и не знаю, что это значит. – justdan0227

+0

Cognito - это способ напрямую использовать сервис AWS без API Gateway, я думаю, вы неверно использовать Cognito для доступа к API Gateway, если я был worng, исправьте меня. – Cenxui

+0

Эй, @cenxui, я не думаю, что вы ошибаетесь, я просто не могу добраться до URL-адреса, чтобы использовать аутентификацию Cognito. – justdan0227

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