Geheimen voor functies beheren

Gebruik secrets om gevoelige configuraties te bieden, zoals persoonlijke toegangstokens en API-sleutels, aan je functies. Hardcode geheime waarden nooit in de broncode en stel ze niet bloot in de frontend. Lees ze tijdens de uitvoering door ctx.getSecret() aan te roepen.

Prerequisites

  • Een Fabric-app met geïnitialiseerde functies. Voor installatie-instructies, zie Use Functions in Fabric Apps.
  • De app is minstens één keer uitgerold met npx rayfin up. rayfin secret set en rayfin secret list richt je op het actief geïmplementeerde item en faalt wanneer er geen externe endpoint bestaat.
  • Een geheime waarde die door jouw functie wordt vereist.

Een geheim instellen

Vanuit de app-wortel schakel je de functiefunctie in en stel je het geheim in:

npx rayfin secret set API_KEY

De opdracht vraagt om de waarde en maskeert je invoer. Om een bestaand geheim bij te werken, voer je hetzelfde commando opnieuw uit. De nieuwe waarde vervangt de bestaande waarde.

Important

Neem geen geheime waarde op in de opdracht en leg deze niet vast in broncodebeheer.

Geheimen weergeven

Vermeld de geconfigureerde geheime namen:

npx rayfin secret list

Het commando toont geheime namen en tijdstempels, maar nooit geheime waarden.

Toegang tot een geheim van een functie

Roep ctx.getSecret('NAME') aan om een geheim op te halen voor de huidige aanroep. De methode keert terug undefined wanneer het geheim niet is geconfigureerd, dus behandel optionele geheimen expliciet of geef een passende niet-geheime standaardinstelling.

De volgende functie haalt een bestand op uit een GitHub-repository. Openbare repositories hebben geen persoonlijk toegangstoken (PAT) nodig. Voor private repositories voegt de functie het GITHUB_PAT geheim toe aan het verzoek:

import {
  UserDataFunctions,
  type RayfinContext,
} from '@microsoft/fabric-user-data-functions';

const udf = new UserDataFunctions();

udf.func(
  'getGitHubFile',
  async (
    owner: string,
    repo: string,
    path: string,
    ref: string,
    ctx: RayfinContext,
  ): Promise<string> => {
    const pat = ctx.getSecret('GITHUB_PAT');
    const headers: Record<string, string> = {
      Accept: 'application/vnd.github.raw+json',
      'User-Agent': 'rayfin-app',
    };

    if (pat) {
      headers.Authorization = `Bearer ${pat}`;
    }

    const encodedPath = path
      .split('/')
      .map(encodeURIComponent)
      .join('/');
    const url =
      `https://api.github.com/repos/${encodeURIComponent(owner)}/` +
      `${encodeURIComponent(repo)}/contents/${encodedPath}` +
      `?ref=${encodeURIComponent(ref || 'main')}`;

    const response = await fetch(url, { headers });
    if (!response.ok) {
      throw new Error(`GitHub ${response.status}: ${await response.text()}`);
    }

    return response.text();
  },
  [],
);

De lege verbindingsarray geeft aan dat de functie geen externe resource audience declareert. Een PAT is een geheim, geen door het platform geleverde resourcetoken.

Configureer geheimen per omgeving

Geef geheime waarden in de omgeving waar de functie draait:

  • Lokale ontwikkeling: Voeg geheime waarden toe aan de Values sectie van rayfin/functions/local.settings.json. De lokale Functions-host leest de functies van de omgeving uit dit bestand.
  • Fabric: Configureer geheimen voor het uitgerolde item in het Fabric-portaal.

Gebruik dezelfde geheime naam in elke omgeving. Bijvoorbeeld, configureer GITHUB_PAT lokaal en in Fabric en lees het vervolgens met ctx.getSecret('API_KEY') in beide omgevingen.

Important

Sla geen geheime waarden op in rayfin/functions/local.settings.json of enig ander bestand in broncodebeheer. Sla alleen niet-vertrouwelijke voorbeelden of plaatshouders op in bestanden die je commit.