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 nenhumaaud
reivindicação existir, o público poderá ser validado usando asclient_id
reivindicaçõescid
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-verify