es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo renovar credenciales en AWS

Hemos estado lidiando con un problema para renovar las credenciales.

Tenemos un SDK de Aws Unity para la API de Dynamodb que obtiene un token de cognito del backend de Aws. El inicio de sesión inicial funciona bien, obtenemos un token, lo usamos en el SDK, obtenemos credenciales y tenemos acceso a los recursos de Aws.

Funciona durante los primeros 4 días. Después de aproximadamente 3-4 días, perdemos el acceso a los recursos, asumo que las credenciales de STS han expirado.

En ese momento, no podemos hacer nada a menos que lo forcemos a detener o borremos los datos. Si cerramos sesión y volvemos a iniciar sesión, todavía no funciona. Es como si las credenciales pasadas expiradas se guardarán de alguna manera para siempre.

¿Alguna idea? ¿Qué debemos hacer después de que las credenciales expiren?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que las credenciales obtenidas de Cognito tienen un tiempo de caducidad de 4 días, y después de eso, el SDK ya no puede acceder a los recursos de AWS. Para resolver este problema, es necesario renovar las credenciales periódicamente, antes de su caducidad. Puede utilizar el método refreshToken() proporcionado por el SDK de Unity de AWS para obtener un nuevo token de Cognito antes de la hora de caducidad. Aquí hay un fragmento de código de ejemplo que demuestra la actualización de tokens:

    AmazonCognitoIdentityProviderClient proveedor = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials(), RegionEndpoint.YOUR_REGION);
    
    CognitoUserPool userPool = new CognitoUserPool("YOUR_USER_POOL_ID", "YOUR_CLIENT_APP_ID", proveedor);
    
    // Inicialice Cognito con su ID de grupo de usuarios, ID de aplicación de cliente y región de AWS.
    CognitoAWSCredentials credenciales = new CognitoAWSCredentials("YOUR_IDENTITY_POOL_ID", RegionEndpoint.YOUR_REGION);
    
    // Obtenga un usuario de Cognito utilizando el grupo de usuarios
    CognitoUser usuario = new CognitoUser("YOUR_USERNAME", "YOUR_CLIENT_APP_ID", userPool, proveedor);
    
    // Autentique al usuario utilizando la contraseña u otro medio.
    usuario.Authenticate("YOUR_PASSWORD", authCallback);
    
    // La función de devolución de llamada que se llama después de que la autenticación tenga éxito
    private void authCallback(AuthenticationResult result)
    {
        // Configure las credenciales obtenidas de Cognito
        credenciales.AddLogin("cognito-idp.YOUR_REGION.amazonaws.com/YOUR_USER_POOL_ID", result.IdToken);
    
        // Utilice las credenciales para acceder a los recursos de AWS
        AmazonDynamoDBClient cliente = new AmazonDynamoDBClient(credenciales, RegionEndpoint.YOUR_REGION);
        ...
    }
    
    // Actualice el token obtenido de Cognito antes de que caduque
    private void refreshToken()
    {
        usuario.RefreshSessionAsync(session, refresherCallback, null);
    }
    
    // La función de devolución de llamada que se llama después de que se actualice la sesión
    private void refresherCallback(NormalizedCognitoUserSession session)
    {
        // Configure las nuevas credenciales obtenidas de Cognito
        credenciales.AddLogin("cognito-idp.YOUR_REGION.amazonaws.com/YOUR_USER_POOL_ID", session.IdToken);
    
        // Utilice las nuevas credenciales para acceder a los recursos de AWS
        AmazonDynamoDBClient cliente = new AmazonDynamoDBClient(credenciales, RegionEndpoint.YOUR_REGION);
        ...
    }
    

    En el código anterior, el método Authenticate() se utiliza para obtener el token inicial de Cognito, y luego el método AddLogin() se utiliza para configurar las credenciales obtenidas del token. El método refreshToken() se utiliza para actualizar el token antes de que caduque, y se vuelve a llamar el método AddLogin() con el nuevo token obtenido de la actualización. Esto asegura que el SDK tenga acceso continuo a los recursos de AWS, incluso después de que caduque el token inicial.

Comments are closed.