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.
El Fabric Extensibility Toolkit proporciona una API JavaScript para adquirir tokens de autenticación que pueden usarse para acceder a APIs de Fabric, servicios Azure y cualquier aplicación segura por Entra. Este artículo ofrece ejemplos completos de referencia y uso de APIs.
Sugerencia
Para una guía rápida, consulta Adquirir tokens Microsoft Entra.
Referencia de API
acquireFrontendAccessToken(params: AcquireFrontendAccessTokenParams): Promise<AccessToken>;
export interface AcquireFrontendAccessTokenParams {
scopes: string[];
}
export interface AccessToken {
token: string;
}
Nota:
La implementación actual del toolkit de extensibilidad soporta adquisición básica de tokens con ámbitos. Funciones avanzadas como el consentimiento completo y la gestión de acceso condicional aún no están disponibles, pero podrían añadirse en futuras versiones.
La API devuelve un AccessToken objeto que contiene:
- token: La cadena de token JWT que debe usar en los encabezados de Autorización
Uso básico
Adquisición simple de tokens
// Acquire a token with default Fabric permissions
const token = await workloadClient.auth.acquireFrontendAccessToken({ scopes: [] });
// Use the token in API calls
const response = await fetch('https://api.fabric.microsoft.com/v1/workspaces', {
headers: {
'Authorization': `Bearer ${token.token}`,
'Content-Type': 'application/json'
}
});
Ficha con oscilaciones específicas
// Request specific scopes for Azure Storage
const token = await workloadClient.auth.acquireFrontendAccessToken({
scopes: ['https://storage.azure.com/user_impersonation']
});
Ejemplos de uso de tokens
Acceso a la API de Fabric
El token puede usarse directamente con las APIs REST de Fabric:
async function listWorkspaces() {
const token = await workloadClient.auth.acquireFrontendAccessToken({ scopes: [] });
const response = await fetch('https://api.fabric.microsoft.com/v1/workspaces', {
headers: {
'Authorization': `Bearer ${token.token}`
}
});
return await response.json();
}
Azure service access
Utiliza los ámbitos para especificar los servicios de Azure a los que necesitas acceder:
async function readFromStorage(accountName, containerName, blobName) {
const token = await workloadClient.auth.acquireFrontendAccessToken({
scopes: ['https://storage.azure.com/user_impersonation']
});
const url = `https://${accountName}.blob.core.windows.net/${containerName}/${blobName}`;
const response = await fetch(url, {
headers: {
'Authorization': `Bearer ${token.token}`,
'x-ms-version': '2021-12-02'
}
});
return await response.text();
}
Acceso a aplicaciones personalizadas
Accede a tus propias aplicaciones seguras por Entra:
async function callCustomAPI() {
const token = await workloadClient.auth.acquireFrontendAccessToken({
scopes: ['https://myapp.contoso.com/data.read']
});
const response = await fetch('https://myapp.contoso.com/api/data', {
headers: {
'Authorization': `Bearer ${token.token}`
}
});
return await response.json();
}
Referencia de los parámetros
scopes
Una serie de cadenas de alcance que especifican los permisos que necesita tu token.
Common Azure service scopes:
-
https://storage.azure.com/user_impersonation- Azure Storage -
https://vault.azure.net/user_impersonation- Azure Key Vault -
https://management.azure.com/user_impersonation- Azure Resource Manager -
https://graph.microsoft.com/User.Read- Microsoft Graph
Ejemplo de uso:
const token = await workloadClient.auth.acquireFrontendAccessToken({
scopes: [
'https://storage.azure.com/user_impersonation'
]
});
Matriz de osciloscopios vacíos: Usa un array vacío para obtener un token con permisos predeterminados de Fabric:
const token = await workloadClient.auth.acquireFrontendAccessToken({ scopes: [] });
Administración de consentimientos
Flujo automático de consentimiento
El Toolkit de Extensibilidad gestiona automáticamente los flujos de trabajo de consentimiento:
- Solicitud inicial: Si falta el consentimiento, se abre una ventana emergente
- Interacción del usuario: El usuario concede o niega permisos
- Cierre automático: El popup se cierra automáticamente tras la acción del usuario
- Entrega del token: Si tiene éxito, el token se devuelve a tu aplicación
Gestión de ventanas emergentes de consentimiento
El toolkit gestiona automáticamente las ventanas emergentes de consentimiento, pero puedes personalizar el comportamiento de redirección del URI. Crea una página de redirección que gestione la respuesta de consentimiento:
// redirect.js - Handle consent redirect
const redirectUriPath = '/close';
const url = new URL(window.location.href);
if (url.pathname?.startsWith(redirectUriPath)) {
// Handle consent errors
if (url?.hash?.includes("error")) {
// Extract error information
const errorMatch = url.hash.match(/error=([^&]+)/);
const errorDescription = url.hash.match(/error_description=([^&]+)/);
// Handle specific errors
if (url.hash.includes("AADSTS650052")) {
console.error("Service principal not configured");
} else if (url.hash.includes("AADSTS65004")) {
console.error("User declined consent");
}
}
// Always close the popup immediately
window.close();
}
Consentimiento entre inquilinos
Para acceder a recursos entre diferentes inquilinos:
// Request consent for cross-tenant access
const token = await workloadClient.auth.acquireAccessToken({
additionalScopesToConsent: ['https://api.partner-app.com/data.read']
});
Control de errores
Escenarios de error comunes
async function robustTokenAcquisition() {
try {
return await workloadClient.auth.acquireAccessToken();
} catch (error) {
switch (error.code) {
case 'user_cancelled':
console.log('User cancelled the consent dialog');
break;
case 'consent_required':
console.log('Additional consent required');
break;
case 'interaction_required':
console.log('User interaction required');
break;
default:
console.error('Authentication error:', error.message);
}
throw error;
}
}
Gestión de la expiración de tokens
class TokenManager {
private currentToken: AccessToken | null = null;
async getValidToken(): Promise<AccessToken> {
if (!this.currentToken || this.isTokenExpired(this.currentToken)) {
this.currentToken = await workloadClient.auth.acquireAccessToken();
}
return this.currentToken;
}
private isTokenExpired(token: AccessToken): boolean {
// Add buffer time to prevent requests with almost-expired tokens
const bufferMinutes = 5;
const expirationWithBuffer = new Date(token.expiresOn.getTime() - (bufferMinutes * 60 * 1000));
return new Date() >= expirationWithBuffer;
}
}
procedimientos recomendados
Caché y reutilización de tokens
- Tokens de caché: Almacenar tokens en memoria hasta la fecha de expiración
- Actualización automática: Implementar la actualización automática de tokens antes de su vencimiento
- Almacenamiento seguro: Nunca persistas los tokens en el almacenamiento local o en cookies
Administración de ámbitos
- Ámbitos mínimos: Solicita solo los permisos que necesitas
- Consentimiento progresivo: Solicitar telescopios adicionales a medida que se utilicen características
- Validación de alcance: Los tokens de verificación incluyen los ámbitos requeridos antes de las llamadas a la API
Control avanzado de errores
- Degradación gradual: Proporcionar funcionalidad de respaldo cuando la autenticación falla
- Mensajería de usuario: Explica claramente por qué se necesitan permisos
- Lógica de reintento: Implementar mecanismos de reintento apropiados para fallos transitorios
Optimización del rendimiento
- Solicitudes paralelas: Adquirir tokens para múltiples servicios en paralelo cuando sea posible
- Operaciones por lotes: Agrupar llamadas API para minimizar la sobrecarga de adquisición de tokens
- Gestión de caché: Implementar estrategias eficientes de almacenamiento en caché de tokens
Contenido relacionado
- Inicio rápido: Compra tokens Microsoft Entra - Guía sencilla para empezar
- Visión general de la autenticación - Conceptos de autenticación de alto nivel
- Directrices de autenticación - Mejores prácticas y recomendaciones
- APIs de Access Fabric - Envoltorios de API preconstruidos