Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Fabric Extensibility Toolkit fornece uma API JavaScript para adquirir tokens de autenticação que podem ser usados para aceder a APIs Fabric, serviços Azure e qualquer aplicação protegida pelo Entra. Este artigo fornece exemplos abrangentes de referência e utilização de APIs.
Sugestão
Para um guia rápido de início, consulte Adquirir tokens Microsoft Entra.
Referência da API
acquireFrontendAccessToken(params: AcquireFrontendAccessTokenParams): Promise<AccessToken>;
export interface AcquireFrontendAccessTokenParams {
scopes: string[];
}
export interface AccessToken {
token: string;
}
Observação
A implementação atual do toolkit de extensibilidade suporta aquisição básica de tokens com escopos. Funcionalidades avançadas como solicitação de consentimento total e tratamento de acesso condicional ainda não estão disponíveis, mas poderão ser adicionadas em versões futuras.
A API devolve um AccessToken objeto que contém:
- token: A cadeia de tokens JWT a usar nos cabeçalhos de Autorização
Utilização básica
Aquisição simples 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'
}
});
Token com oscilações específicas
// Request specific scopes for Azure Storage
const token = await workloadClient.auth.acquireFrontendAccessToken({
scopes: ['https://storage.azure.com/user_impersonation']
});
Exemplos de utilização de tokens
Acesso à API de Fabric
O token pode ser usado diretamente com APIs REST do 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
Use os escopos para especificar os serviços Azure a que precisa de acesso:
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();
}
Acesso a aplicações personalizadas
Aceda às suas próprias aplicações protegidas pela 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();
}
Referência do parâmetro
scopes
Um conjunto de cadeias de escopo que especificam as permissões que o seu token precisa.
Common Azure service scopes:
-
https://storage.azure.com/user_impersonation- Azure Storage -
https://vault.azure.net/user_impersonation- Cofre Azure Key -
https://management.azure.com/user_impersonation- Azure Resource Manager -
https://graph.microsoft.com/User.Read- Microsoft Graph
Exemplo de uso:
const token = await workloadClient.auth.acquireFrontendAccessToken({
scopes: [
'https://storage.azure.com/user_impersonation'
]
});
Arranjo de osciloscópios vazios: Use um array vazio para obter um token com permissões padrão do Fabric:
const token = await workloadClient.auth.acquireFrontendAccessToken({ scopes: [] });
Gestão de consentimentos
Fluxo automático de consentimento
O Extensibility Toolkit gere automaticamente os fluxos de trabalho de consentimento:
- Pedido inicial: Se faltar consentimento, abre-se uma janela pop-up
- Interação do utilizador: O utilizador concede ou nega permissões
- Fecho automático: O popup fecha automaticamente após a ação do utilizador
- Entrega do token: Se for bem-sucedida, o token é devolvido à sua aplicação
Gestão de popups de consentimento
O toolkit gere automaticamente os pop-ups de consentimento, mas pode personalizar o comportamento do URI de redirecionamento. Crie uma página de redirecionamento que trate da resposta de consentimento:
// 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();
}
Consentimento entre inquilinos
Para aceder 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']
});
Tratamento de erros
Cenários de erro comuns
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;
}
}
Gestão da expiração do token
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;
}
}
Melhores práticas
Cache e reutilização de tokens
- Tokens de cache: Armazenar tokens na memória até à expiração
- Atualização automática: Implementar atualização automática do token antes do vencimento
- Armazenamento seguro: Nunca persista tokens para armazenamento local ou cookies
Gestão do âmbito
- Âmbito mínimo: Solicite apenas as permissões de que precisa
- Consentimento progressivo: Solicitar escopos adicionais à medida que as funcionalidades forem utilizadas
- Validação de escopo: Os tokens de verificação incluem os escopos necessários antes das chamadas API
Tratamento avançado de erros
- Degradação graciosa: Fornecer funcionalidade de recuo quando a autenticação falha
- Mensagens do utilizador: Explique claramente porque são necessárias permissões
- Lógica de retentativa: Implementar mecanismos de retentativa apropriados para falhas transitórias
Otimização do desempenho
- Pedidos paralelos: Adquirir tokens para múltiplos serviços em paralelo sempre que possível
- Operações em lote: Chamadas de API de grupo para minimizar a sobrecarga de aquisição de tokens
- Gestão de cache: Implementar estratégias eficientes de cache de tokens
Conteúdo relacionado
- Início rápido: Adquira tokens Microsoft Entra - Guia simples para começar
- Visão geral da autenticação - Conceitos de autenticação de alto nível
- Diretrizes de autenticação - Melhores práticas e recomendações
- APIs do Access Fabric - Wrappers de API pré-construídos