Esta página aplica-se ao Apigee e ao Apigee Hybrid.
Ver documentação do
Apigee Edge.
A política DecodeJWS descodifica o cabeçalho JWS sem validar a assinatura no JWS e escreve cada cabeçalho numa variável de fluxo. Esta política é mais útil quando usada em conjunto com a política VerifyJWS, quando o valor de um cabeçalho do JWS tem de ser conhecido antes de verificar a assinatura do JWS.
Um JWS pode ter uma carga útil anexada, como no formulário:
header.payload.signature
Em alternativa, o JWS pode omitir a carga útil, denominada carga útil separada, e estar no seguinte formato:
header..signature
A política DecodeJWS funciona com ambas as formas porque apenas descodifica a parte do cabeçalho do JWS. A política DecodeJWS também funciona independentemente do algoritmo que foi usado para assinar o JWS.
Consulte a vista geral das políticas de JWS e JWT para ver uma introdução detalhada e uma vista geral do formato de um JWS.
Esta política é uma política extensível e a utilização desta política pode ter implicações de custo ou utilização, consoante a sua licença do Apigee. Para ver informações sobre os tipos de políticas e as implicações de utilização, consulte Tipos de políticas.
Exemplo: descodifique um JWS
A política apresentada abaixo descodifica um JWS encontrado na variável de fluxo var.JWS. Esta variável tem de estar presente e conter um JWS viável (decifrável). A política pode obter o JWS de qualquer variável de fluxo.
<DecodeJWS name="JWS-Decode-HS256"> <DisplayName>JWS Verify HS256</DisplayName> <Source>var.JWS</Source> </DecodeJWS>
Para cada cabeçalho na parte do cabeçalho do JWS, a política define uma variável de fluxo denominada:
jws.policy-name.header.header-name
Se o JWS tiver um payload anexado, define a variável de fluxo jws.policy-name.header.payload
para o payload. Para um payload separado, payload está vazio.
Consulte o artigo Variáveis de fluxo para ver uma lista completa das variáveis definidas por esta política.
Referência do elemento para descodificar JWS
A referência da política descreve os elementos e os atributos da política Decode JWS.
Atributos que se aplicam ao elemento de nível superior
<DecodeJWS name="JWS" continueOnError="false" enabled="true" async="false">
Os seguintes atributos são comuns a todos os elementos principais da política.
| Atributo | Descrição | Predefinição | Presença |
|---|---|---|---|
| nome |
O nome interno da política. Os carateres que pode usar no nome estão restritos a:
A-Z0-9._\-$ %. No entanto, a IU do Apigee aplica restrições adicionais, como a remoção automática de carateres que não sejam alfanuméricos.
Opcionalmente, use o elemento |
N/A | Obrigatória |
| continueOnError |
Definido como false para devolver um erro quando uma política falha. Este comportamento é o esperado para a maioria das políticas.
Definido como |
falso | Opcional |
| ativada |
Defina como true para aplicar a política.
Defina como |
verdadeiro | Opcional |
| assíncrono | Este atributo foi descontinuado. | falso | Descontinuado |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Use em conjunto com o atributo name para etiquetar a política no editor de proxy da IU de gestão com um nome diferente em linguagem natural.
| Predefinição | Se omitir este elemento, é usado o valor do atributo name da política. |
| Presença | Opcional |
| Tipo | String |
<Source>
<Source>JWS-variable</Source>
Se estiver presente, especifica a variável de fluxo na qual a política espera encontrar o JWS para descodificar.
| Predefinição | request.header.authorization (Consulte a nota acima para ver informações importantes
acerca da predefinição). |
| Presença | Opcional |
| Tipo | String |
| Valores válidos | Um nome de variável de fluxo do Apigee |
Variáveis de fluxo
Após o êxito, as políticas Verify JWS e Decode JWS definem as variáveis de contexto de acordo com este padrão:
jws.{policy_name}.{variable_name}
Por exemplo, se o nome da política for verify-jws, a política armazena o algoritmo especificado no JWS nesta variável de contexto: jws.verify-jws.header.algorithm
| Nome da variável | Descrição |
|---|---|
decoded.header.name |
O valor analisável em JSON de um cabeçalho no payload. É definida uma variável para cada cabeçalho na carga útil. Embora também possa usar as header.namevariáveis de fluxo,
esta é a variável recomendada para usar para aceder a um cabeçalho. |
header.algorithm |
O algoritmo de assinatura usado no JWS. Por exemplo, RS256, HS384, etc. Consulte o parâmetro de cabeçalho(algoritmo) para mais informações. |
header.kid |
O ID da chave, se tiver sido adicionado quando o JWS foi gerado. Consulte também "Usar um conjunto de chaves Web JSON (JWKS)" na vista geral das políticas de JWT e JWS para validar um JWS. Consulte o parâmetro do cabeçalho(ID da chave) para mais informações. |
header.type |
O valor do tipo de cabeçalho. Para mais informações, consulte o artigo Parâmetro de cabeçalho(tipo). |
header.name |
O valor do cabeçalho com nome (padrão ou adicional). Um destes é definido para cada cabeçalho adicional na parte do cabeçalho do JWS. |
header-json |
O cabeçalho no formato JSON. |
payload |
O payload JWS, se o JWS tiver um payload anexado. Para uma carga útil separada, esta variável está vazia. |
valid |
No caso de VerifyJWS, esta variável é verdadeira quando a assinatura é validada e a hora atual é anterior à data de validade do token e posterior ao valor notBefore do token, se estiverem presentes. Caso contrário, devolve false.
No caso de DecodeJWS, esta variável não está definida. |
Referência de erro
Esta secção descreve os códigos de falha e as mensagens de erro devolvidas, bem como as variáveis de falha definidas pelo Apigee quando esta política aciona um erro. Estas informações são importantes para saber se está a desenvolver regras de falhas para tratar falhas. Para saber mais, consulte o artigo O que precisa de saber acerca dos erros de políticas e Como processar falhas.
Erros de tempo de execução
Estes erros podem ocorrer quando a política é executada.
| Código de falha | Estado de HTTP | Ocorre quando |
|---|---|---|
steps.jws.FailedToDecode |
401 |
A política não conseguiu descodificar o JWS. O JWS está possivelmente danificado. |
steps.jws.FailedToResolveVariable |
401 |
Ocorre quando a variável de fluxo especificada no elemento <Source> da política não existe. |
steps.jws.InvalidClaim |
401 |
Para uma reivindicação em falta ou uma incompatibilidade de reivindicação, ou um cabeçalho em falta ou uma incompatibilidade de cabeçalho. |
steps.jws.InvalidJsonFormat |
401 |
Foi encontrado um JSON inválido no cabeçalho JWS. |
steps.jws.InvalidJws |
401 |
Este erro ocorre quando a validação da assinatura JWS falha. |
steps.jws.InvalidPayload |
401 |
A carga útil JWS é inválida. |
steps.jws.InvalidSignature |
401 |
<DetachedContent> é omitido e o JWS tem um payload de conteúdo separado. |
steps.jws.MissingPayload |
401 |
O payload JWS está em falta. |
steps.jws.NoAlgorithmFoundInHeader |
401 |
Ocorre quando o JWS omite o cabeçalho do algoritmo. |
steps.jws.UnknownException |
401 |
Ocorreu uma exceção desconhecida. |
Erros de implementação
Estes erros podem ocorrer quando implementa um proxy que contém esta política.
| Nome do erro | Ocorre quando |
|---|---|
InvalidAlgorithm |
Os únicos valores válidos são: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512,
HS256, HS384, HS512. |
|
|
Outros possíveis erros de implementação. |
Variáveis de falha
Estas variáveis são definidas quando ocorre um erro de tempo de execução. Para mais informações, consulte o artigo O que precisa de saber acerca dos erros de políticas.
| Variáveis | Onde | Exemplo |
|---|---|---|
fault.name="fault_name" |
fault_name é o nome da falha, conforme indicado na tabela Erros de tempo de execução acima. O nome da falha é a última parte do código de falha. | fault.name Matches "TokenExpired" |
JWS.failed |
Todas as políticas JWS definem a mesma variável em caso de falha. | jws.JWS-Policy.failed = true |
Exemplo de resposta de erro
Para o processamento de erros, a prática recomendada é captar a parte errorcode da resposta de erro. Não confie no texto em faultstring, porque pode mudar.
Exemplo de regra de falha
<FaultRules>
<FaultRule name="JWS Policy Errors">
<Step>
<Name>JavaScript-1</Name>
<Condition>(fault.name Matches "TokenExpired")</Condition>
</Step>
<Condition>JWS.failed=true</Condition>
</FaultRule>
</FaultRules>