Validação de clientes e públicos para o Amazon Cognito - Amazon Verified Permissions

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Validação de clientes e públicos para o Amazon Cognito

Quando você adiciona uma fonte de identidade a um repositório de políticas, as Permissões Verificadas têm opções de configuração que verificam se os tokens de ID e acesso estão sendo usados conforme o esperado. Essa validação acontece no processamento IsAuthorizedWithToken e nas solicitações de BatchIsAuthorizedWithToken API. O comportamento difere entre tokens de ID e acesso e entre as fontes de identidade do Amazon Cognito e do OIDC. Com os provedores de grupos de usuários do Amazon Cognito, as Permissões Verificadas podem validar a ID do cliente em tokens de ID e de acesso. Com os provedores do OIDC, as Permissões Verificadas podem validar o ID do cliente em tokens de ID e o público em tokens de acesso.

Um ID de cliente é um identificador associado à instância do provedor de identidade que seu aplicativo usa, por exemplo1example23456789. Um público é um caminho de URL associado à parte confiável ou ao destino pretendido do token de acesso, por exemplohttps://mytoken.example.com. Ao usar tokens de acesso, a aud reivindicação está sempre associada ao público.

Os tokens de ID do Amazon Cognito têm uma aud declaração que contém o ID do cliente do aplicativo. Os tokens de acesso têm uma client_id declaração que também contém o ID do cliente do aplicativo.

Quando você insere um ou mais valores para a validação do aplicativo Cliente em sua fonte de identidade, o Verified Permissions compara essa lista de clientes do aplicativo com IDs a aud reivindicação do token de ID ou com a declaração do token client_id de acesso. As permissões verificadas não validam uma URL de público confiável para fontes de identidade do Amazon Cognito.

Autorização do lado do cliente para JWTs

Talvez você queira processar tokens web JSON em seu aplicativo e passar suas reivindicações para Permissões Verificadas sem usar uma fonte de identidade do repositório de políticas. Você pode extrair seus atributos de entidade de um JSON Web Token (JWT) e analisá-los em Permissões verificadas.

Este exemplo mostra como você pode chamar Permissões Verificadas de um aplicativo usando um JWT.¹

async function authorizeUsingJwtToken(jwtToken) { const payload = await verifier.verify(jwtToken); let principalEntity = { entityType: "PhotoFlash::User", // the application needs to fill in the relevant user type entityId: payload["sub"], // the application need to use the claim that represents the user-id }; let resourceEntity = { entityType: "PhotoFlash::Photo", //the application needs to fill in the relevant resource type entityId: "jane_photo_123.jpg", // the application needs to fill in the relevant resource id }; let action = { actionType: "PhotoFlash::Action", //the application needs to fill in the relevant action id actionId: "GetPhoto", //the application needs to fill in the relevant action type }; let entities = { entityList: [], }; entities.entityList.push(...getUserEntitiesFromToken(payload)); let policyStoreId = "PSEXAMPLEabcdefg111111"; // set your own policy store id const authResult = await client .isAuthorized({ policyStoreId: policyStoreId, principal: principalEntity, resource: resourceEntity, action: action, entities, }) .promise(); return authResult; } function getUserEntitiesFromToken(payload) { let attributes = {}; let claimsNotPassedInEntities = ['aud', 'sub', 'exp', 'jti', 'iss']; Object.entries(payload).forEach(([key, value]) => { if (claimsNotPassedInEntities.includes(key)) { return; } if (Array.isArray(value)) { var attibuteItem = []; value.forEach((item) => { attibuteItem.push({ string: item, }); }); attributes[key] = { set: attibuteItem, }; } else if (typeof value === 'string') { attributes[key] = { string: value, } } else if (typeof value === 'bigint' || typeof value ==='number') { attributes[key] = { long: value, } } else if (typeof value === 'boolean') { attributes[key] = { boolean: value, } } }); let entityItem = { attributes: attributes, identifier: { entityType: "PhotoFlash::User", entityId: payload["sub"], // the application needs to use the claim that represents the user-id } }; return [entityItem]; }

¹ Este exemplo de código usa a aws-jwt-verifybiblioteca para verificar se a JWTs assinatura é compatível com IdPs OIDC.