Administrer funksjonshemmeligheter

Bruk hemmeligheter for å gi sensitiv konfigurasjon, som personlige tilgangstokler og API-nøkler, til funksjonene dine. Aldri hardkoder hemmelige verdier i kildekoden eller eksponer dem for frontend. Les dem under kjøretid ved å ringe ctx.getSecret().

Forutsetninger

  • En Fabric-app med initialiserte funksjoner. For oppsettsinstruksjoner, se Bruk funksjoner i Fabric Apps.
  • Appen ble distribuert minst én gang med npx rayfin up. rayfin secret set og rayfin secret list målrette det aktive distribuerte elementet og feile når det ikke finnes noe eksternt endepunkt.
  • En hemmelig verdi som kreves av din funksjon.

Sett en hemmelighet

Fra appens rot, aktiver funksjonsfunksjonen og sett hemmeligheten:

npx rayfin secret set API_KEY

Kommandoen gir en forespørsel om verdien og skjuler inputen din. For å oppdatere en eksisterende hemmelighet, kjør samme kommando igjen. Den nye verdien erstatter den eksisterende.

Important

Ikke inkluder en hemmelig verdi i kommandoen eller commi den til kildekontroll.

Listehemmeligheter

List opp de konfigurerte hemmelige navnene:

npx rayfin secret list

Kommandoen viser hemmelige navn og tidsstempler, men viser aldri hemmelige verdier.

Få tilgang til en hemmelighet fra en funksjon

Kall ctx.getSecret('NAME') for å hente en hemmelighet for den nåværende påkallelsen. Metoden returnerer undefined når hemmeligheten ikke er konfigurert, så håndter valgfrie hemmeligheter eksplisitt eller oppgi en passende ikke-hemmelig standard.

Følgende funksjon henter en fil fra et GitHub-repositorium. Offentlige arkiver krever ikke en personlig tilgangstoken (PAT). For private repositorier legger funksjonen til hemmeligheten GITHUB_PAT i forespørselen:

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();
  },
  [],
);

Det tomme tilkoblingsarrayet indikerer at funksjonen ikke erklærer en ekstern ressurs-målgruppe. En PAT er en hemmelighet, ikke en plattformbasert ressurstoken.

Konfigurer hemmeligheter etter miljø

Oppgi hemmelige verdier i miljøet der funksjonen kjører:

  • Lokal utvikling: Legg til hemmelige verdier i seksjonen Values av rayfin/functions/local.settings.json. Den lokale Functions-verten leser funksjonsmiljøverdier fra denne filen.
  • Fabric: Konfigurer hemmeligheter for det deployerte objektet i Fabric-portalen.

Bruk det samme hemmelige navnet i hvert miljø. For eksempel, konfigurer GITHUB_PAT lokalt og i Fabric, og les det deretter i ctx.getSecret('API_KEY') begge miljøene.

Important

Ikke committer hemmelige verdier i rayfin/functions/local.settings.json eller noen annen fil til kildekontroll. Lagre kun ikke-hemmelige eksempler eller plassholdere i filer du commiter.