Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Distribuerade funktioner anropar externa Azure- och Fabric-resurser som appens identitet genom att använda applikationsautentisering. Deklarera publiken som en funktion behöver, och använd plattformstillhandahållna, resursbegränsade tokens genom ctx.Tokens.
Inloggning via utvecklar-CLI:t och identifiering av slutpunkter vid redigering är separata från åtkomst till den driftsatta körningen. Verifiera behörigheterna för den distribuerade appens identitet även när en utvecklare kan komma åt resursen.
Förutsättningar
- En app i Fabric med Functions har initialiserats. För installationsinstruktioner, se Använd funktioner i Fabric Apps.
-
services.functions.auth.typeinställd påapplicationirayfin/rayfin.yml. För konfigurationsdetaljer, se Application authentication. - Appidentiteten gav tillgång till varje extern resurs som Functions-koden anropar.
Deklarera en extern anslutning
Deklarera målgrupper i annoteringen RayfinContext och läs sedan token med begränsat omfång från ctx.Tokens:
import {
UserDataFunctions,
AudienceType,
type RayfinContext,
} from '@microsoft/fabric-user-data-functions';
const udf = new UserDataFunctions();
udf.func(
'accessStorage',
async (
ctx: RayfinContext<AppSchema, AudienceType.Storage>,
): Promise<string> => {
const token: string = ctx.Tokens.Storage;
// Use the token with the resource SDK or REST API.
return 'ok';
},
[],
);
Annotationen är deklarationen. Att lista en publik i RayfinContext<Schema, Audiences> registrerar kopplingsbindningen. Behåll det tredje argumentet som udf.func()[].
ctx.Tokens begränsas till de målgrupper som du anger. En odeklarerad publik orsakar ett kompileringsfel:
async (
ctx: RayfinContext<AppSchema, AudienceType.Sql | AudienceType.Storage>,
) => {
const sqlToken: string = ctx.Tokens.Sql;
const storageToken: string = ctx.Tokens.Storage;
};
Tokenvärden har typen string . Att deklarera en publik registrerar dess bindning, men garanterar inte tokentillgänglighet eller resursåtkomst. Om värden inte tillhandahåller en deklarerad token utlöses ett fel när dess ctx.Tokens-egenskap läses.
Specificera schemaargumentet
RayfinContext använder appens schema först. Använd samma schema som du skickar till RayfinClient<AppSchema> så att dataklienten förblir typad när du lägger till målgrupper:
async (ctx: RayfinContext<AppSchema, AudienceType.Sql>) => {
const data = ctx.getDataClient();
const token = ctx.Tokens.Sql;
};
Om en funktion behöver målgrupper men inte har tillgång till Rayfin DB, skicka standardschemat explicit:
async (ctx: RayfinContext<Record<string, any>, AudienceType.Fabric>) => {
const token = ctx.Tokens.Fabric;
};
Stödda publikgrupper
AudienceType är sanningens källa för stödda målgrupper:
| Extern resurs | AudienceType |
|---|---|
| lakehouse i Fabric, datalager, SQL-databas i Fabric, speglad databas eller Azure SQL-databas | Sql |
| Fabric OneLake-filer, Azure Blob Storage, Azure Table storage eller Azure Queue Storage | Storage |
| Microsoft Fabric REST API | Fabric |
| Azure AI Foundry | AzureAI |
| Azure DevOps | ADO |
En Power BI-semantisk modell finns inte tillgänglig via ctx.Tokens. Använd kontakten fabric-semanticmodel istället. Vägledning om anslutningsprogram finns i Ansluta till data i Fabric.
Förstå metadata för distribution
Typargument raderas innan en funktion körs. Vid npx rayfin up löser TypeScript-kompilatorn de deklarerade målgrupperna och skriver unionen till distributionsmetadata. Funktionsarbetaren använder den metadatan för att binda anslutningarna.
Ett typalias fungerar när Functions-projektet har en tsconfig.json:
type SqlAccess = AudienceType.Sql;
async (ctx: RayfinContext<AppSchema, SqlAccess>) => {
const token = ctx.Tokens.Sql;
};
Föredrar bokstavliga AudienceType.X värderingar. Om Functions-projektet inte har , tsconfig.jsonkan CLI:n inte använda kompilatorn utan läser istället annotationssyntaxen. I det läget översätts ett alias till sitt eget namn i stället för den målgrupp det representerar. Behandla CLI-varningen om den här reservlösningen som ett fel som måste åtgärdas.
Kontextparametern måste ha en explicit RayfinContext<...> annotation. Typgenerering identifierar kontextparametern genom denna annotation. Utan den behandlas parametern som en request-body-parameter.
Tilldela resursbehörigheter
För nuvarande Fabric-appar är appidentiteten ägaren till Fabric-appobjektet. Externa anslutningar använder denna identitet och dess behörigheter, inte identiteten eller behörigheterna för appanvändaren som anropar funktionen.
Ge appidentiteten de behörigheter som krävs av varje resurs och API som Functions kodanropar. Deklarering av en publik och distribution av Functions registrerar en tokenbindning men ger inte behörigheter till målresursen.
Behåll resurstokens på servern. Returnera dem aldrig som funktionsresultat eller skicka dem till frontend.
Appinloggning och auktorisation för att anropa en funktion är separata från appens identitets åtkomst till externa resurser.
Rayfin DB-identitet
Rayfin DB använder en separat autentiseringsväg.
ctx.getDataClient() använder anropets Rayfin-token, så databasåtkomst bevarar anroparens identitet och databasbehörigheter. Applikationsautentisering för Functions byter inte Rayfin DB-åtkomst till applikationsidentiteten.
Använd en token med ett Azure SDKs
Många Azure SDKs-klienter förväntar sig en TokenCredential istället för en rå tokensträng. Definiera en adapter som returnerar token från kontexten:
import type { TokenCredential, AccessToken } from '@azure/identity';
class ContextTokenCredential implements TokenCredential {
constructor(private readonly token: string) {}
async getToken(): Promise<AccessToken> {
return {
token: this.token,
expiresOnTimestamp: Date.now() + 3600_000,
};
}
}
Skicka new ContextTokenCredential(ctx.Tokens.Storage) eller korrekt deklarerad token till en SDK-klient som kräver en legitimation. Installera SDK-paket för resurser i rayfin/functions/package.json, inte i projektets rotkatalog.
Utveckla lokalt
npx rayfin devoch npx rayfin dev functions apply starta en lokal Azure Functions Core Tools-värd. I den lokala Functions-värden använder externa resurstokens identiteten och behörigheterna för det konto som appbyggaren använder för att logga in.
Distribuerade funktioner använder istället appens identitet. Ett lyckat lokalt anrop bevisar därför inte att den distribuerade appens identitet har behörighet att komma åt resursen. Testa den distribuerade funktionen efter att ha gett appens identitet de nödvändiga behörigheterna.