Validação de clientes e públicos para fornecedores de OIDC - 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 fornecedores de OIDC

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 OIDC têm uma aud reivindicação que contém o cliente IDs, como. 1example23456789

Os tokens de acesso do OIDC têm uma aud declaração que contém a URL do público do token, comohttps://myapplication.example.com, e uma client_id afirmação que contém o cliente IDs, como. 1example23456789

Ao configurar seu repositório de políticas, insira um ou mais valores para validação de público que seu armazenamento de políticas usa para validar o público de um token.

  • Tokens de ID — As permissões verificadas validam o ID do cliente verificando se pelo menos um membro do cliente IDs na aud reivindicação corresponde a um valor de validação de público.

  • Tokens de acesso — as permissões verificadas validam o público verificando se o URL na aud declaração corresponde a um valor de validação do público. Se nenhuma aud reivindicação existir, o público poderá ser validado usando as client_id reivindicações cid ou. Verifique com seu provedor de identidade a afirmação e o formato corretos do público.

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.