Dela via


Autentisera och auktorisera åtkomst till Azure OpenAI-API:er med Hjälp av Azure API Management

GÄLLER FÖR: Alla API Management-nivåer

I den här artikeln får du lära dig om hur du autentiserar och auktoriserar till Azure OpenAI API-slutpunkter som hanteras med Hjälp av Azure API Management. Den här artikeln visar följande vanliga metoder:

  • Autentisering – Autentisera till ett Azure OpenAI-API med principer som autentiserar med antingen en API-nyckel eller en hanterad Identitet för Microsoft Entra-ID.

  • Auktorisering – För mer detaljerad åtkomstkontroll kan du förauktorisera begäranden som skickar OAuth 2.0-token som genererats av en identitetsprovider, till exempel Microsoft Entra-ID.

Bakgrund finns i:

Förutsättningar

Innan du följer stegen i den här artikeln måste du ha:

  • En API Management-instans. Exempel på steg finns i Skapa en Azure API Management-instans.
  • En Azure OpenAI-resurs och -modell som lagts till i DIN API Management-instans. Exempel på steg finns i Importera ett Azure OpenAI-API som ett REST-API.
  • Behörigheter för att skapa en appregistrering i en identitetsprovider, till exempel en Microsoft Entra-klientorganisation som är associerad med din Azure-prenumeration (för OAuth 2.0-auktorisering).

Autentisera med API-nyckel

Ett standardsätt för att autentisera till ett Azure OpenAI-API är att använda en API-nyckel. För den här typen av autentisering måste alla API-begäranden innehålla en giltig API-nyckel i api-key HTTP-huvudet.

  • API Management kan hantera API-nyckeln på ett säkert sätt med hjälp av ett namngivet värde.
  • Det namngivna värdet kan sedan refereras till i en API-princip för att ange api-key huvudet i begäranden till Azure OpenAI-API:et. Vi ger två exempel på hur du gör detta: den set-backend-service ena använder principen och den andra använder set-header principen.

Lagra API-nyckeln i ett namngivet värde

  1. Hämta en API-nyckel från Azure OpenAI-resursen. I Azure-portalen hittar du en nyckel på sidan Nycklar och slutpunkter för Azure OpenAI-resursen.
  2. Gå till DIN API Management-instans och välj Namngivna värden på den vänstra menyn.
  3. Välj + Lägg till och lägg till värdet som en hemlighet, eller om du vill ha mer säkerhet använder du en key vault-referens.

Skicka API-nyckeln i API-begäranden – set-backend-service-policy

  1. Skapa en serverdel som pekar på Azure OpenAI-API:et.

    1. I den vänstra menyn i DIN API Management-instans väljer du Serverdelar.
    2. Välj + Lägg till och ange ett beskrivande namn för serverdelen. Exempel: openai-backend.
    3. Under Typ väljer du Anpassad och anger URL:en för Azure OpenAI-slutpunkten. Exempel: https://contoso.openai.azure.com/openai.
    4. Under Autentiseringsuppgifter för auktorisering väljer du Rubriker och anger api-nyckel som rubriknamn och det namngivna värdet som värde.
    5. Välj Skapa.
  2. Lägg till följande set-backend-service principfragment i principavsnittet inbound för att skicka API-nyckeln i begäranden till Azure OpenAI-API:et.

    I det här exemplet är serverdelsresursen openai-backend.

    <set-backend-service backend-id="openai-backend" />
    

Skicka API-nyckeln i API-begäranden – princip för set-header

Du kan också lägga till följande set-header principfragment i principavsnittet inbound för att skicka API-nyckeln i begäranden till Azure OpenAI-API:et. Det här principfragmentet anger api-key huvudet med det namngivna värde som du har konfigurerat.

I det här exemplet är det namngivna värdet i API Management openai-api-key.

<set-header name="api-key" exists-action="override">
    <value>{{openai-api-key}}</value>
</set-header>

Autentisera med hanterad identitet

Ett alternativt sätt att autentisera till ett Azure OpenAI-API med hjälp av en hanterad identitet i Microsoft Entra-ID. Bakgrund finns i Konfigurera Azure OpenAI-tjänsten med hanterad identitet.

Följande är steg för att konfigurera API Management-instansen så att den använder en hanterad identitet för att autentisera begäranden till ett Azure OpenAI-API.

  1. Aktivera en systemtilldelad eller användartilldelad hanterad identitet för din API Management-instans. I följande exempel förutsätts att du har aktiverat instansens systemtilldelade hanterade identitet.

  2. Tilldela den hanterade identiteten rollen Cognitive Services OpenAI-användare , som är begränsad till lämplig resurs. Du kan till exempel tilldela den systemtilldelade hanterade identiteten Rollen Cognitive Services OpenAI-användare på Azure OpenAI-resursen. Detaljerade steg finns i Rollbaserad åtkomstkontroll för Azure OpenAI-tjänsten.

  3. Lägg till följande principfragment i principavsnittet för att autentisera inbound begäranden till Azure OpenAI-API:et med hjälp av den hanterade identiteten.

    I det här exemplet:

    <authentication-managed-identity resource="https://cognitiveservices.azure.com" output-token-variable-name="managed-id-access-token" ignore-error="false" /> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@("Bearer " + (string)context.Variables["managed-id-access-token"])</value> 
    </set-header> 
    

OAuth 2.0-auktorisering med identitetsprovider

Om du vill aktivera mer detaljerad åtkomst till OpenAPI-API:er av vissa användare eller klienter kan du förauktorisera åtkomst till Azure OpenAI API med OAuth 2.0-auktorisering med Microsoft Entra-ID eller någon annan identitetsprovider. Bakgrund finns i Skydda ett API i Azure API Management med OAuth 2.0-auktorisering med Microsoft Entra-ID.

Kommentar

Använd OAuth 2.0-auktorisering som en del av en djupskyddsstrategi. Det är inte en ersättning för API-nyckelautentisering eller hanterad identitetsautentisering till ett Azure OpenAI-API.

Här följer steg på hög nivå för att begränsa API-åtkomsten till användare eller appar som är auktoriserade med hjälp av en identitetsprovider.

  1. Skapa ett program i din identitetsprovider för att representera OpenAI API i Azure API Management. Om du använder Microsoft Entra-ID registrerar du ett program i din Microsoft Entra-ID-klientorganisation. Registrera information som program-ID och målgrupps-URI.

    Vid behov konfigurerar du programmet så att det har roller eller omfång som representerar de detaljerade behörigheter som krävs för att få åtkomst till Azure OpenAI-API:et.

  2. Lägg till ett inbound principfragment i API Management-instansen Authorization för att verifiera begäranden som presenterar en JSON-webbtoken (JWT) i rubriken. Placera det här kodfragmentet före andra inbound principer som du anger för att autentisera till Azure OpenAI-API:et.

    Kommentar

    I följande exempel visas den allmänna strukturen för principerna för att verifiera en JWT. Anpassa dem till din identitetsprovider och kraven för ditt program och API.

    • validate-azure-ad-token – Om du använder Microsoft Entra-ID konfigurerar validate-azure-ad-token du principen för att verifiera målgruppen och anspråken i JWT. Mer information finns i principreferensen.

      <validate-azure-ad-token tenant-id={{TENANT_ID}} header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
          <client-application-ids>
                  <application-id>{{CLIENT_APP_ID}}</application-id>
          </client-application-ids>
         <audiences>
              <audience>...</audience> 
          </audiences>
          <required-claims>
              <claim name=...>
                  <value>...</value>
              </claim>
          </required-claims>
      </validate-azure-ad-token>
      
    • validate-jwt – Om du använder en annan identitetsprovider konfigurerar validate-jwt du principen för att verifiera målgruppen och anspråken i JWT. Mer information finns i principreferensen.

      <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
          <openid-config url={{OPENID_CONFIGURATION_URL}} />
          <issuers>
              <issuer>{{ISSUER_URL}}</issuer>
          </issuers>
          <audiences>
              <audience>...</audience> 
          </audiences>
          <required-claims>
              <claim name=...>
                  <value>...</value>
              </claim>
          </required-claims>
      </validate-jwt>