Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Nasazené funkce volají externí Azure a Fabric zdroje jako identitu aplikace pomocí autentizace aplikace. Deklarujte publikum, které funkce potřebuje, a používejte platformou poskytované, zdrojově omezené tokeny prostřednictvím ctx.Tokens.
Přihlášení do vývojářského CLI a zjišťování koncových bodů v době tvorby jsou oddělené od přístupu k nasazenému běhovému prostředí. Ověřte oprávnění identity nasazené aplikace i v případě, že k datu má přístup vývojář.
Prerequisites
- Aplikace Fabric s inicializovanou službou Functions. Pro instrukce k nastavení viz Použít funkce v Fabric Apps.
-
services.functions.auth.typenastaveno naapplicationvrayfin/rayfin.yml. Pro podrobnosti o konfiguraci viz Application authentication. - Identita aplikace umožňovala přístup ke každému externímu zdroji, který kód Functions volá.
Deklarujte externí spojení
Deklarujte okruhy příjemců v anotaci RayfinContext a potom načtěte token s vymezeným rozsahem z 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';
},
[],
);
Anotace je deklarace. Uvedení okruhu příjemců v RayfinContext<Schema, Audiences> zaregistruje svázání připojení. Třetí argument z udf.func() ponecháme jako .[]
ctx.Tokens je omezeno na publikum, které deklarujete. Nedeklarované publikum způsobuje chybu při kompilaci:
async (
ctx: RayfinContext<AppSchema, AudienceType.Sql | AudienceType.Storage>,
) => {
const sqlToken: string = ctx.Tokens.Sql;
const storageToken: string = ctx.Tokens.Storage;
};
Hodnoty tokenů mají string typ. Deklarace publika registruje jeho vazbu, ale nezaručuje dostupnost tokenů ani přístup ke zdrojům. Pokud hostitel neposkytne deklarovaný token, čtení jeho ctx.Tokens vlastnosti zobrazí chybu.
Specifikujte argument schématu
RayfinContext Nejprve vezměte schéma aplikace. Použijte stejné schéma, které předáváte do RayfinClient<AppSchema>, aby datový klient zůstal typovaný při přidávání okruhů uživatelů:
async (ctx: RayfinContext<AppSchema, AudienceType.Sql>) => {
const data = ctx.getDataClient();
const token = ctx.Tokens.Sql;
};
Pokud funkce potřebuje publikum, ale nemá přístup k Rayfin DB, předejte výchozí schéma explicitně:
async (ctx: RayfinContext<Record<string, any>, AudienceType.Fabric>) => {
const token = ctx.Tokens.Fabric;
};
Podporované publikum
AudienceType je zdrojem pravdy pro podporované publikum:
| Externí zdroj | AudienceType |
|---|---|
| Fabric lakehouse, datový sklad, databáze SQL ve Fabric, zrcadlená databáze nebo Azure SQL Database | Sql |
| Fabric OneLake soubory, Azure Blob Storage, Azure Table storage nebo Azure Queue Storage | Storage |
| Microsoft Fabric REST API | Fabric |
| Azure AI Foundry | AzureAI |
| Azure DevOps | ADO |
Sémantický model Power BI není dostupný přes ctx.Tokens. Místo toho použijte fabric-semanticmodel konektor. Pro pokyny k propojení viz Připojit se k datům Fabric.
Porozumět metadatům nasazení
Typové argumenty jsou před spuštěním funkce mazány. Během npx rayfin up kompilátor TypeScript vyhodnotí deklarované cílové skupiny a zapíše sjednocení typů do metadat nasazení. Pracovník Functions používá tato metadata k navázání spojení.
Typový alias funguje, pokud projekt Functions obsahuje tsconfig.json:
type SqlAccess = AudienceType.Sql;
async (ctx: RayfinContext<AppSchema, SqlAccess>) => {
const token = ctx.Tokens.Sql;
};
Preferujte doslovné hodnoty AudienceType.X . Pokud projekt Functions nemá tsconfig.json, CLI nemůže použít kompilátor a místo toho čte syntaxi anotací. V tomto režimu se alias překládá jako své vlastní jméno, nikoli jako cílová skupina, kterou představuje. Varování CLI o této záložní variantě považujte za chybu k opravě.
Parametr kontextu musí mít explicitní RayfinContext<...> anotaci. Generování typů označuje parametr kontextu touto anotací. Bez něj je parametr považován za parametr těla požadavku.
Udělit oprávnění k vlastním zdrojům
U současných aplikací Fabric je identita aplikace vlastníkem položky aplikace Fabric. Externí připojení používají tuto identitu a její oprávnění, nikoli identitu nebo oprávnění uživatele aplikace, který funkci vyvolává.
Udělte identitě aplikace oprávnění vyžadovaná všemi prostředky a rozhraními API, která kód Functions volá. Deklarování cílové skupiny a nasazení funkcí registrují vazbu tokenu, ale neudělují oprávnění k cílovému prostředku.
Udržujte tokeny zdrojů na serveru. Nikdy je nevracejte jako výsledky funkcí ani je neposílejte na frontend.
Přihlášení aplikací a autorizace k vyvolání funkce jsou oddělené od přístupu identity aplikace k externím zdrojům.
Identita Rayfin DB
Rayfin DB používá samostatnou autentizační cestu.
ctx.getDataClient() používá Rayfin token volání, takže přístup k databázi zachovává identitu volajícího a jeho databázová oprávnění. Autentizace aplikací pro Functions nepřepíná přístup k databázi Rayfin na identitu aplikace.
Použijte token s Azure SDK
Mnoho klientů sady Azure SDK očekává TokenCredential namísto nezpracovaného řetězce tokenu. Definujte adaptér, který vrací token z kontextu:
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,
};
}
}
Předejte klientovi sady SDK, který vyžaduje přihlašovací údaje, new ContextTokenCredential(ctx.Tokens.Storage) nebo odpovídající deklarovaný token. Instalujte balíčky resource SDK do rayfin/functions/package.json, ne do kořene projektu.
Vývoj v místním prostředí
npx rayfin dev a npx rayfin dev functions apply spustí místního hostitele Azure Functions Core Tools. V lokálním hostiteli Functions externí resource tokeny používají identitu a oprávnění účtu, který aplikátor používá k přihlášení.
Nasazené funkce místo toho používají identitu aplikace. Úspěšný lokální hovor tedy nedokazuje, že nasazená identita aplikace má oprávnění k přístupu k tomuto zdroji. Otestujte nasazenou funkci poté, co aplikaci udělíte požadovaná oprávnění.