Как установить провайдера OIDC для AWSAssumeRoleWebIdentity

Я разрабатываю приложение для Android, которое использует firebase authentication для входа и использования AWS S3 а также dynamodb для управления данными / изображениями. Я пытаюсь делегировать доступ к ресурсу AWS через AWSAssumeRoleWebIdentity, Причина, по которой я это делаю AWS Sign-In UI не позволяет достаточно настройки для пользовательского интерфейса и потока пользовательского интерфейса. Я решил использовать firebase authentication только для входа и регистрации.

Пожалуйста, найдите исходный код и OIDC Provider установка. С ними журнал ошибок есть

No OpenIDConnect provider found in your account for https://securetoken.google.com/[project-name] (Service: AWSSecurityTokenService; Status Code: 400; Error Code: InvalidIdentityToken; Request ID: 37607060-9e1c-11e8-8ae0-636eae27c3bf)

Поставщик удостоверений AWS IAM был создан с именем "securetoken.google.com/[my-project-name]/" с созданным мною отпечатком, ссылаясь на [1] и идентификаторы клиента OAuth 2.0, полученные в Credentials из Google Cloud Service API & Services,

Исходный код показан ниже.

public void uploadImageFile() {
    CustomLog.logI("start of uploadImageFile");

    setIDToken();
}

private void setIDToken() {
    FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
    // To get ID Token of the user authenticated by google authentication
    mUser.getIdToken(true)
            .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                public void onComplete (@NonNull Task< GetTokenResult > task) {
                    if (task.isSuccessful()) {
                        // Token information is set to mIDToken of the global variable
                        mIDToken = task.getResult().getToken();
                        AsyncTaskForAssumeRole asyncTaskForAssumeRole = new AsyncTaskForAssumeRole();
                        asyncTaskForAssumeRole.execute();
                    } else {
                        CustomLog.logE(task.getException().getMessage());
                    }
                }
            });
}

public class AsyncTaskForAssumeRole extends AsyncTask<Void, Void, BasicSessionCredentials> {

    protected BasicSessionCredentials doInBackground(Void... params) {
        try {
            // set credentials from AssumeRoleWithWebIdentity
            BasicSessionCredentials credentials = setAssumeRoleWithWebIdentity();
            return credentials;
        } catch (Exception e) {
            CustomLog.logE(e.getMessage());
            return null;
        }
    }

    protected void onPostExecute(BasicSessionCredentials credentials) {

        // upload file with S3 connection
        connectToS3ForUpload(credentials);

    }
}

private BasicSessionCredentials setAssumeRoleWithWebIdentity(){
    CustomLog.logD("start of setAssumeRoleWithWebIdentity");
    String ROLE_ARN = [my role arn];
    // set AssumeRoleWithWebIdentity request with created policy and token information retrieved through Google Sign in information
    AssumeRoleWithWebIdentityRequest request = new AssumeRoleWithWebIdentityRequest()
            .withWebIdentityToken(mIDToken)
            .withRoleArn(ROLE_ARN)
            .withRoleSessionName("wifsession");

    BasicAWSCredentials basicCreds = new BasicAWSCredentials("", "");
    AWSSecurityTokenServiceClient sts = new AWSSecurityTokenServiceClient(basicCreds);
    AssumeRoleWithWebIdentityResult result = sts.assumeRoleWithWebIdentity(request);

    Credentials stsCredentials = result.getCredentials();
    String subjectFromWIF = result.getSubjectFromWebIdentityToken();
    BasicSessionCredentials credentials = new BasicSessionCredentials(stsCredentials.getAccessKeyId(),
            stsCredentials.getSecretAccessKey(),
            stsCredentials.getSessionToken());

    return credentials;
}

Большое спасибо заранее.

[1] http://docs.aws.amazon.com/cli/latest/reference/iam/create-open-id-connect-provider.html

1 ответ

Решение

Рассмотрите возможность использования Amazon Cognito Federated Identities (Identity Pools) для объединения (сопоставления) пользователя из вашего Identity Provider в Amazon Cognito и получения Cognito Identity Id, который можно использовать для авторизации доступа к ресурсам AWS. См. https://docs.aws.amazon.com/cognito/latest/developerguide/open-id.html для получения дополнительной информации.

Map<String, String> logins = new HashMap<String, String>();
logins.put("login.provider.com", token);
credentialsProvider.setLogins(logins);

Теперь вы можете использовать credentialsProvider объект с клиентом Amazon S3.

AmazonS3 s3Client = new AmazonS3Client(getApplicationContext(), credentialsProvider);
Другие вопросы по тегам