Esta página se aplica a Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
Qué
Te permite usar la autenticación básica, que es un método ligero, para proteger la última milla. La política toma un nombre de usuario y una contraseña, los codifica en Base64 y escribe el valor resultante en una variable. El valor resultante tiene el formato Basic
Base64EncodedString
. Normalmente, este valor se escribe en un encabezado HTTP, como el encabezado Authorization.
La política también te permite decodificar las credenciales almacenadas en una cadena codificada en Base64 en un nombre de usuario y una contraseña.
Esta política es una política extensible y su uso puede tener implicaciones en cuanto a costes o utilización, en función de tu licencia de Apigee. Para obtener información sobre los tipos de políticas y las implicaciones de uso, consulta Tipos de políticas.
Vídeo: en este vídeo se muestra cómo codificar en base64 un nombre de usuario y una contraseña mediante la política de autenticación básica.
Vídeo: en este vídeo se muestra cómo decodificar un nombre de usuario y una contraseña codificados en base64 mediante la política de autenticación básica.
Ejemplos
Codificación de salida
<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>
En la configuración de la política de ejemplo anterior, el nombre de usuario y la contraseña que se van a codificar se derivan de las variables especificadas por los atributos ref
de los elementos <User>
y <Password>
. Las variables deben definirse antes de que se ejecute esta política. Normalmente, las variables se rellenan con valores que se leen de un mapa de clave/valor. Consulta la política de operaciones de mapas de clave-valor.
Esta configuración da como resultado el encabezado HTTP llamado Authorization, tal como se especifica en el elemento <AssignTo>, que se añade al mensaje de solicitud de salida enviado al servidor backend:
Authorization: Basic TXlVc2VybmFtZTpNeVBhc3N3b3Jk
Los valores <User>
y <Password>
se concatenan
con dos puntos antes de la codificación Base64.
Supongamos que tienes un mapa de clave-valor con la siguiente entrada:
{ "encrypted" : true, "entry" : [ { "name" : "username", "value" : "MyUsername }, { "name" : "password", "value" : "MyPassword } ], "name" : "BasicAuthCredentials" }
Adjunta las siguientes políticas KeyValueMapOperations antes de la política BasicAuthentication
para poder extraer los valores de los elementos <User>
y
<Password>
del almacén de claves/valores y rellenarlos en las
variables credentials.username
y 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>
Decodificación 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>
En este ejemplo de política, la política decodifica el nombre de usuario y la contraseña del encabezado HTTP Authorization
, tal como se especifica en el elemento <Source>. La cadena codificada en Base64
debe tener el formato Basic Base64EncodedString.
La política escribe el nombre de usuario decodificado en la variable request.header.username y la contraseña decodificada en la variable request.header.password.
Acerca de la política de autenticación básica
La política tiene dos modos de funcionamiento:
- Codificar: codifica en Base64 un nombre de usuario y una contraseña almacenados en variables.
- Decodificar: decodifica el nombre de usuario y la contraseña de una cadena codificada en Base64.
El nombre de usuario y la contraseña se suelen almacenar en el almacén de clave-valor y, a continuación, se leen de él en tiempo de ejecución. Para obtener información sobre cómo usar el almacén de clave-valor, consulta la política Operaciones de mapa de clave-valor.
Referencia de elemento
En la referencia de elementos se describen los elementos y atributos de la 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 <BasicAuthentication>
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
En la siguiente tabla se describen los atributos que son comunes a todos los elementos superiores de la política:
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
name |
El nombre interno de la política. El valor del atributo Opcionalmente, usa el elemento |
N/A | Obligatorio |
continueOnError |
Asigna el valor Asigna el valor |
falso | Opcional |
enabled |
Asigna el valor Selecciona |
true | Opcional |
async |
Este atributo está obsoleto. |
falso | Obsoleto |
Elemento <DisplayName>
Úsalo junto con el atributo name
para etiquetar la política en el editor de proxy de la interfaz de gestión con un nombre diferente en lenguaje natural.
<DisplayName>Policy Display Name</DisplayName>
Predeterminado |
N/A Si omite este elemento, se usará el valor del atributo |
---|---|
Presencia | Opcional |
Tipo | Cadena |
Elemento <Operation>
Determina si la política codifica o decodifica las credenciales en Base64.
<Operation>Encode</Operation>
Valor predeterminado: | N/A |
Presencia: | Obligatorio |
Tipo: |
Cadena. A continuación se muestran los valores válidos.
|
Elemento <IgnoreUnresolvedVariables>
Si se le asigna el valor true
, la política no generará un error si no se puede resolver una variable. Cuando se usa en el contexto de una política BasicAuthentication, esta opción suele tener el valor false
, ya que suele ser útil generar un error si no se encuentra un nombre de usuario o una contraseña en las variables especificadas.
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
Valor predeterminado: | true |
Presencia: | Opcional |
Tipo: |
Booleano |
Elemento <User>
- Para la codificación, usa el elemento
<User>
para especificar la variable que contiene el nombre de usuario. Los valores de nombre de usuario y contraseña se concatenan con dos puntos antes de la codificación Base64. - Para descodificar, especifica la variable en la que se escribe el nombre de usuario descodificado.
<User ref="request.queryparam.username" />
Valor predeterminado: | N/A |
Presencia: | Obligatorio |
Tipo: |
N/A |
Atributos
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
ref |
Variable desde la que la política lee dinámicamente el nombre de usuario (codificación) o escribe el nombre de usuario (decodificación). |
N/A | Obligatorio |
Elemento <Password>
- Para la codificación, use el elemento
<Password>
para especificar la variable que contiene la contraseña. - Para la decodificación, especifica la variable en la que se escribe la contraseña decodificada.
<Password ref="request.queryparam.password" />
Valor predeterminado: | N/A |
Presencia: | Obligatorio |
Tipo: |
N/A |
Atributos
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
ref |
La variable de la que la política lee dinámicamente la contraseña (codificar) o en la que escribe la contraseña (decodificar). |
N/A | Obligatorio |
Elemento <AssignTo>
Especifica la variable de destino que se va a definir con el valor codificado o decodificado generado por esta política.
En el siguiente ejemplo se indica que la política debe asignar al encabezado Authorization
del mensaje el valor generado:
<AssignTo createNew="false">request.header.Authorization</AssignTo>
Valor predeterminado: | N/A |
Presencia: | Obligatorio |
Tipo: |
Cadena |
Atributos
Atributo | Descripción | Predeterminado | Presencia |
---|---|---|---|
createNew | Determina si la política debe sobrescribir la variable si ya se ha definido.
Si el valor es "false", la asignación a la variable se produce solo si la variable no está definida (es nula). Si el valor es "true", la asignación a la variable siempre se produce. Normalmente, este atributo tiene el valor "false" (el valor predeterminado). |
falso | Opcional |
Elemento <Source>
Para decodificar, la variable que contiene la cadena codificada en Base64, con el formato Basic
Base64EncodedString
. Por ejemplo, especifica request.header.Authorization
, que corresponde al encabezado Authorization.
<Source>request.header.Authorization</Source>
Valor predeterminado: | N/A |
Presencia: | Obligatorio para la operación de decodificación. |
Tipo: |
N/A |
Variables de flujo
La siguiente variable de flujo se define cuando falla la política:
BasicAuthentication.{policy_name}.failed
(con el valor true)
Referencia de errores
En esta sección se describen los códigos de error y los mensajes de error que devuelve Apigee, así como las variables de error que define, cuando esta política activa un error. Es importante conocer esta información si vas a desarrollar reglas de errores para gestionar errores. Para obtener más información, consulta Qué debes saber sobre los errores de políticas y Cómo gestionar los fallos.
Errores de tiempo de ejecución
Estos errores pueden producirse cuando se ejecuta la política.
Código de fallo | Estado de HTTP | Causa | Solucionar |
---|---|---|---|
steps.basicauthentication.InvalidBasicAuthenticationSource |
500 |
En una decodificación, cuando la cadena codificada Base64 entrante no contiene un valor válido o
el encabezado tiene un formato incorrecto (por ejemplo, no empieza por Basic ). |
build |
steps.basicauthentication.UnresolvedVariable |
500 |
No están presentes las variables de origen necesarias para la decodificación o la codificación. Este error solo puede producirse si IgnoreUnresolvedVariables es false. |
build |
Errores de implementación
Estos errores pueden producirse al implementar un proxy que contenga esta política.
Nombre del error | Se produce cuando | Solucionar |
---|---|---|
UserNameRequired |
El elemento <User> debe estar presente en la operación con nombre. |
build |
PasswordRequired |
El elemento <Password> debe estar presente en la operación con nombre. |
build |
AssignToRequired |
El elemento <AssignTo> debe estar presente en la operación con nombre. |
build |
SourceRequired |
El elemento <Source> debe estar presente en la operación con nombre. |
build |
Variables de error
Estas variables se definen cuando se produce un error de tiempo de ejecución. Para obtener más información, consulta el artículo Información sobre los errores de las políticas.
Variables | Dónde | Ejemplo |
---|---|---|
fault.name="fault_name" |
fault_name es el nombre del fallo, tal como se indica en la tabla Errores de tiempo de ejecución de arriba. El nombre del error es la última parte del código de error. | fault.name Matches "UnresolvedVariable" |
BasicAuthentication.policy_name.failed |
policy_name es el nombre de la política especificado por el usuario que ha provocado el error. | BasicAuthentication.BA-Authenticate.failed = true |
Ejemplo de respuesta de error
{ "fault":{ "detail":{ "errorcode":"steps.basicauthentication.UnresolvedVariable" }, "faultstring":"Unresolved variable : request.queryparam.password" } }
Regla de error de ejemplo
<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 operaciones de mapa de valores clave