Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La biblioteca de identidades de Azure incluye credenciales, tipos públicos que implementan la interfaz TokenCredential de la biblioteca de Azure Core. Una credencial representa un flujo de autenticación distinto para adquirir un token de acceso de Microsoft Entra ID. Estas credenciales se pueden encadenar para formar una secuencia ordenada de mecanismos de autenticación que se van a intentar.
Funcionamiento de una credencial encadenada
En tiempo de ejecución, una cadena de credenciales intenta autenticarse mediante la primera credencial de la secuencia. Si esa credencial no puede adquirir un token de acceso, se intenta realizar la siguiente credencial de la secuencia, etc., hasta que se obtenga correctamente un token de acceso. En el diagrama de secuencia siguiente se muestra este comportamiento:
¿Por qué usar cadenas de credenciales?
Una credencial encadenada puede ofrecer las siguientes ventajas:
reconocimiento del entorno: selecciona automáticamente la credencial más adecuada en función del entorno en el que se ejecuta la aplicación. Sin él, tendría que escribir código como este:
// Set up credential based on environment (Azure or local development) if os.Getenv("WEBSITE_HOSTNAME") != "" { clientID := azidentity.ClientID("abcd1234-...") opts := azidentity.ManagedIdentityCredentialOptions{ID: clientID} credential, err = azidentity.NewManagedIdentityCredential(&opts) if err != nil { // TODO: handle error } } else { // Use Azure CLI Credential credential, err = azidentity.NewAzureCLICredential(nil) if err != nil { // TODO: handle error } }
transiciones sin problemas: la aplicación puede pasar del desarrollo local al entorno de ensayo o producción sin cambiar el código de autenticación.
Resistencia mejorada: incluye un mecanismo de reserva que pasa a la siguiente credencial cuando la anterior no puede adquirir un token de acceso.
Cómo elegir una credencial encadenada
En Go, hay dos opciones para el encadenamiento de credenciales:
-
Usa una cadena preconfigurada: utiliza la cadena preconfigurada implementada por el tipo
DefaultAzureCredential
. Para este enfoque, consulte la sección Información general sobre DefaultAzureCredential. - Crear una cadena de credenciales personalizada: comience con una cadena vacía e incluya solo lo que necesita. Para este enfoque, consulte la sección Información general sobre ChainedTokenCredential.
Introducción a DefaultAzureCredential
DefaultAzureCredential es una cadena preconfigurada de credenciales fundamentada. Está diseñado para admitir muchos entornos, junto con los flujos de autenticación y las herramientas de desarrollo más comunes. En forma gráfica, la cadena subyacente tiene este aspecto:
Orden en el que DefaultAzureCredential
intenta las credenciales.
compra | Credential: | Descripción |
---|---|---|
1 | Entorno | Lee una colección de variables de entorno para determinar si una entidad de servicio de aplicación (usuario de aplicación) está configurada para la aplicación. Si es así, DefaultAzureCredential usa estos valores para autenticar la aplicación en Azure. Este método se usa con más frecuencia en entornos de servidor, pero también se puede usar al desarrollar localmente. |
2 | Identidad de carga de trabajo | Si la aplicación se implementa en un host de Azure con la identidad de carga de trabajo habilitada, autentíquela. |
3 | Identidad Administrada | Si la aplicación se implementa en un host de Azure con identidad administrada habilitada, autentíquela en Azure mediante esa identidad administrada. |
4 | CLI de Azure | Si el desarrollador se autentica en Azure mediante el comando az login de la CLI de Azure, autentíquela en Azure con esa misma cuenta. |
5 | CLI para desarrolladores de Azure | Si el desarrollador se autentica en Azure mediante el comando azd auth login de la CLI para desarrolladores de Azure, autentíquese con esa cuenta. |
En su forma más sencilla, puede usar la versión sin parámetros de DefaultAzureCredential
de la siguiente manera:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
// create a credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// TODO: handle error
}
// create a Blob service client
accountURL := "https://<my_account_name>.blob.core.windows.net"
client, err := azblob.NewClient(accountURL, credential, nil)
if err != nil {
// TODO: handle error
}
Personalización de DefaultAzureCredential
Para excluir todas las credenciales Developer tool
o Deployed service
, establezca la variable de entorno AZURE_TOKEN_CREDENTIALS
a prod
o dev
, respectivamente. Cuando se usa un valor de prod
, la cadena de credenciales subyacente tiene el siguiente aspecto:
Cuando se usa un valor de dev
, la cadena tiene el siguiente aspecto:
Importante
La AZURE_TOKEN_CREDENTIALS
variable de entorno se admite en azidentity
las versiones del módulo 1.10.0 y versiones posteriores.
Introducción a ChainedTokenCredential
ChainedTokenCredential es una cadena vacía a la que agregas credenciales para satisfacer las necesidades de la aplicación. Por ejemplo:
azCLI, err := azidentity.NewAzureCLICredential(nil)
if err != nil {
// handle error
}
azdCLI, err := azidentity.NewAzureDeveloperCLICredential(nil)
if err != nil {
// handle error
}
chain, err := azidentity.NewChainedTokenCredential([]azcore.TokenCredential{azCLI, azdCLI}, nil)
if err != nil {
// handle error
}
El ejemplo de código anterior crea una cadena de credenciales adaptada formada por dos credenciales. Se intenta AzureCLICredential
primero, seguido de AzureDeveloperCLICredential
, si es necesario. En forma gráfica, la cadena tiene el siguiente aspecto:
Sugerencia
Para mejorar el rendimiento, optimice el orden de las credenciales en ChainedTokenCredential
de la mayoría a las credenciales menos usadas.
Guía de uso para DefaultAzureCredential
DefaultAzureCredential
es, sin duda, la manera más fácil de empezar a trabajar con la biblioteca de identidades de Azure, pero esa comodidad conlleva ventajas y desventajas. Una vez que implemente la aplicación en Azure, debe comprender los requisitos de autenticación de la aplicación. Por ese motivo, reemplace DefaultAzureCredential
por una implementación de TokenCredential
específica, como ManagedIdentityCredential
.
Este es el motivo:
- Desafíos de Depuración: Cuando se produce un error en la autenticación, puede resultar desafiante depurar e identificar la credencial problemática. Debe habilitar el registro para ver la progresión de una credencial a la siguiente y el estado de éxito o error de cada una. Para obtener más información, consulte Depuración de una credencial encadenada.
-
sobrecarga de rendimiento: el proceso de probar secuencialmente varias credenciales puede suponer una sobrecarga de rendimiento. Por ejemplo, cuando se ejecuta en una máquina de desarrollo local, la identidad administrada no está disponible. Por lo tanto,
ManagedIdentityCredential
siempre falla en el entorno de desarrollo local, a menos que se deshabilite explícitamente a través de su propiedad con prefijoexclude
correspondiente. -
comportamiento imprevisible:
DefaultAzureCredential
comprueba la presencia de determinadas variables de entorno . Es posible que alguien pueda agregar o modificar estas variables de entorno en el nivel de sistema en el equipo host. Esos cambios se aplican globalmente y, por tanto, modifican el comportamiento deDefaultAzureCredential
en tiempo de ejecución en cualquier aplicación que se ejecute en esa máquina.
Depuración de una credencial encadenada
Para diagnosticar un problema inesperado o comprender lo que hace una credencial encadenada, habilite el registro en la aplicación. Opcionalmente, filtre los registros solo a aquellos eventos emitidos por la biblioteca cliente de Azure Identity. Por ejemplo:
import azlog "github.com/Azure/azure-sdk-for-go/sdk/azcore/log"
// print log output to stdout
azlog.SetListener(func(event azlog.Event, s string) {
fmt.Println(s)
})
// include only azidentity credential logs
azlog.SetEvents(azidentity.EventAuthentication)
Para obtener instrucciones sobre cómo resolver errores de tipos de credenciales específicos, consulte la guía de solución de problemas de .