Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
O que
Permite usar a autenticação básica leve para
maior segurança. A política usa um nome de usuário e uma senha, a Base64 os codifica e grava o
valor resultante em uma variável. O valor resultante está no formato Basic
Base64EncodedString
. Normalmente, esse valor é gravado em um cabeçalho HTTP, como
Autorização.
A política também permite decodificar as credenciais armazenadas em uma string codificada em Base64 em um nome de usuário e uma senha.
Vídeo: este vídeo demonstra como codificar um nome de usuário e senha em base64 usando a política de autenticação básica.
Vídeo: este vídeo demonstra como decodificar um nome de usuário e uma senha codificados em base64 usando a política de autenticação básica.
Amostras
Codificação de saída
<BasicAuthentication name="ApplyBasicAuthHeader"> <DisplayName>ApplyBasicAuthHeader</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="BasicAuth.credentials.username" /> <Password ref="BasicAuth.credentials.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> </BasicAuthentication>
Na configuração da política de amostra acima, o nome de usuário e a senha a serem codificados são
derivados das variáveis especificadas pelos atributos ref
nos
elementos <User>
e <Password>
. As variáveis precisam ser
definidas antes da execução dessa política. Normalmente, as variáveis são preenchidas por valores
lidos em um mapa de chave-valor. Consulte a política de operações de mapeamento de
chave-valor.
Essa configuração resulta no cabeçalho HTTP denominado Authorization, conforme especificado pelo elemento <AssignTo>, sendo adicionado à mensagem de solicitação de saída enviada para o back-end. servidor:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
Os valores <User>
e <Password>
são concatenados
com dois-pontos antes da codificação Base64.
Considere que você tem um mapa de chave-valor com a seguinte entrada:
{ "encrypted" : true, "entry" : [ { "name" : "username", "value" : "MyUsername" }, { "name" : "password", "value" : "MyPassword" } ], "name" : "BasicAuthCredentials" }
Anexe as seguintes políticas KeyValueMapOperations antes da política BasicAuthentication
para extrair os valores dos elementos <User>
e
<Password>
do armazenamento de chave-valor e preenchê-los para as
variáveis credentials.username
e credentials.password
.
<KeyValueMapOperations name="getCredentials" mapIdentifier="BasicAuthCredentials"> <Scope>apiproxy</Scope> <Get assignTo="credentials.username" index='1'> <Key> <Parameter>username</Parameter> </Key> </Get> <Get assignTo="credentials.password" index='1'> <Key> <Parameter>password</Parameter> </Key> </Get> </KeyValueMapOperations>
Decodificação de entrada
<BasicAuthentication name="DecodeBaseAuthHeaders"> <DisplayName>Decode Basic Authentication Header</DisplayName> <Operation>Decode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.header.username" /> <Password ref="request.header.password" /> <Source>request.header.Authorization</Source> </BasicAuthentication>
Nesta amostra de política, a política decodifica o nome de usuário e a senha do
cabeçalho HTTP Authorization
, conforme especificado pelo elemento <Source>. A string codificada em
Base64 precisa estar no formato Basic Base64EncodedString.
A política grava o nome de usuário decodificado na variável request.header.username e a senha decodificada na variável request.header.password.
Sobre a política de autenticação básica
A política tem dois modos de operações:
- Encode: a Base64 codifica um nome de usuário e uma senha armazenados nas variáveis.
- Decode: decodifica o nome de usuário e a senha de uma string codificada em Base64.
Geralmente, o nome de usuário e a senha são armazenados no armazenamento de chave/valor e, em seguida, leem a partir do armazenamento de chave/valor no ambiente de execução. Para ver detalhes sobre o uso do armazenamento de chave-valor, consulte a Política de operações de mapeamento de chave-valor.
Referência de elemento
A referência de elemento descreve os elementos e atributos da política BasicAuthentication.
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1"> <DisplayName>Basic Authentication 1</DisplayName> <Operation>Encode</Operation> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <User ref="request.queryparam.username" /> <Password ref="request.queryparam.password" /> <AssignTo createNew="false">request.header.Authorization</AssignTo> <Source>request.header.Authorization</Source> </BasicAuthentication>
Atributos de <BasicAuthentication>
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
A tabela a seguir descreve atributos comuns a todos os elementos pai de políticas:
Atributo | Descrição | Padrão | Presença |
---|---|---|---|
name |
O nome interno da política. O valor do atributo Opcionalmente, use o elemento |
N/A | Obrigatório |
continueOnError |
Defina como Defina como |
falso | Opcional |
enabled |
Defina como Defina como |
true | Opcional |
async |
Esse atributo está obsoleto. |
falso | Obsoleto |
Elemento <DisplayName>
Use em conjunto com o atributo name
para rotular a política no
editor de proxy da IU de gerenciamento com um nome de linguagem natural diferente.
<DisplayName>Policy Display Name</DisplayName>
Padrão |
N/A Se você omitir esse elemento, será usado o valor do atributo |
---|---|
Presença | Opcional |
Tipo | String |
Elemento <Operation>
Determina se a política Base64 codifica ou decodifica credenciais.
<Operation>Encode</Operation>
Padrão: | N/A |
Presença: | Obrigatório |
Tipo: |
String. Valores válidos:
|
Elemento <IgnoreUnresolvedVariables>
Quando definida como true
, a política não emitirá um erro se uma variável não puder ser
resolvida. Quando usada no contexto de uma política BasicAuthentication, essa configuração geralmente é definida
como false
porque geralmente é vantajoso gerar um erro se um nome de usuário ou
senha não for encontrado nas variáveis especificadas.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Padrão: | verdadeiro |
Presença: | Opcional |
Tipo: |
Booleanos |
Elemento <User>
- Para codificação, use o elemento
<User>
para especificar a variável que contém o nome de usuário. Os valores de nome de usuário e senha são concatenados com dois-pontos antes da codificação Base64. - Para decodificar, especifique a variável em que o nome de usuário decodificado é gravado.
<User ref="request.queryparam.username" />
Padrão: | N/A |
Presença: | Obrigatório |
Tipo: |
N/A |
Atributos
Atributo | Descrição | Padrão | Presença |
---|---|---|---|
ref |
A variável da qual a política lê dinamicamente o nome de usuário (codificado) ou grava o nome de usuário (decodificação). |
N/A | Obrigatório |
Elemento <Password>
- Para codificação, use o elemento
<Password>
para especificar a variável que contém a senha. - Para decodificar, especifique a variável em que a senha decodificada é gravada.
<Password ref="request.queryparam.password" />
Padrão: | N/A |
Presença: | Obrigatório |
Tipo: |
N/A |
Atributos
Atributo | Descrição | Padrão | Presença |
---|---|---|---|
ref |
A variável da qual a política lê dinamicamente a senha (codificar) ou grava a senha (decodificar). |
N/A | Obrigatório |
Elemento <AssignTo>
Especifica a variável de destino a ser definida com o valor codificado ou decodificado gerado por essa política.
O exemplo a seguir indica que a política precisa definir o cabeçalho Authorization
da mensagem para o valor gerado:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
Padrão: | N/A |
Presença: | Obrigatório |
Tipo: |
String |
Atributos
Atributo | Descrição | Padrão | Presença |
---|---|---|---|
createNew | Determina se a política precisa substituir a variável, caso ela já esteja
definida.
Quando "falso", a atribuição à variável ocorrerá somente se a variável estiver desativada no momento (nula). Quando "verdadeiro", a atribuição à variável sempre ocorrerá. Normalmente, você define esse atributo como "falso" (o padrão). |
falso | Opcional |
Elemento <Source>
Para decodificação, a variável que contém a string codificada em Base64, no
formato Basic
Base64EncodedString
. Por exemplo,
especifique request.header.Authorization
, correspondente ao cabeçalho Autorização.
<Source>request.header.Authorization</Source>
Padrão: | N/A |
Presença: | Obrigatório para a operação de decodificação. |
Tipo: |
N/A |
Variáveis de fluxo
A seguinte variável de fluxo é definida quando a política falha:
BasicAuthentication.{policy_name}.failed
(com o valor true)
Referência de erros
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle errors. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource |
500 | On a decode when the incoming Base64 encoded string does not contain a valid value or the header is malformed (e.g., does not start with "Basic"). | build |
steps.basicauthentication.UnresolvedVariable |
500 | The required source variables for the decode or encode are not present. This error can
only occur if IgnoreUnresolvedVariables is false. |
build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Occurs when | Fix |
---|---|---|
UserNameRequired |
The <User> element must be present for the named operation. |
build |
PasswordRequired |
The <Password> element must be present for the named operation. |
build |
AssignToRequired |
The <AssignTo> element must be present for the named operation. |
build |
SourceRequired |
The <Source> element must be present for the named operation. |
build |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "UnresolvedVariable" |
BasicAuthentication.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | BasicAuthentication.BA-Authenticate.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"steps.basicauthentication.UnresolvedVariable" }, "faultstring":"Unresolved variable : request.queryparam.password" } }
Example fault rule
<FaultRule name="Basic Authentication Faults"> <Step> <Name>AM-UnresolvedVariable</Name> <Condition>(fault.name Matches "UnresolvedVariable") </Condition> </Step> <Step> <Name>AM-AuthFailedResponse</Name> <Condition>(fault.name = "InvalidBasicAuthenticationSource")</Condition> </Step> <Condition>(BasicAuthentication.BA-Authentication.failed = true) </Condition> </FaultRule>