Política BasicAuthentication

Você está vendo a documentação do Apigee Edge.
Acesse a 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.

Exemplos

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 name pode conter letras, números, espaços, hifens, sublinhados e pontos. Esse valor não pode exceder 255 caracteres.

Opcionalmente, use o elemento <DisplayName> para rotular a política no editor de proxy da IU de gerenciamento com um nome de linguagem natural diferente.

N/A Obrigatório
continueOnError

Defina como false para retornar um erro quando uma política falhar. Esse é o comportamento esperado na maioria das políticas.

Defina como true para que a execução do fluxo continue, mesmo depois que uma política falhar.

false Opcional
enabled

Defina como true para aplicar a política.

Defina como false para desativar a política. A política não será aplicada mesmo se ela permanecer anexada a um fluxo.

verdadeiro Opcional
async

Esse atributo está obsoleto.

false Descontinuado

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 name da política.

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:

  • Codificar
  • Decodificar

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:

Booleano

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).

false 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").
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.

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.
PasswordRequired The <Password> element must be present for the named operation.
AssignToRequired The <AssignTo> element must be present for the named operation.
SourceRequired The <Source> element must be present for the named operation.

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>

Esquemas

Temas relacionados

Política de operações do mapa de chave-valor