Del 3: Exempel på API-implementering från tredje part

Föregående del: Autentiseringskrav

I exempelscenariot använder huvudprogrammet ett API från tredje part som skyddas med en åtkomstnyckel. Det här avsnittet visar API:et med hjälp av Azure Functions, men samma principer gäller oavsett hur eller var API:et implementeras – oavsett om du är värd för programmet på en annan molnleverantör eller en traditionell webbserver.

Den viktigaste aspekten är att alla klientbegäranden till den skyddade slutpunkten måste innehålla åtkomstnyckeln, som appen måste hantera på ett säkert sätt. Det här avsnittet innehåller en översikt över hur du implementerar ett sådant API med hjälp av Azure Functions, men du kan anpassa principerna efter dina specifika behov.

Exempel på API-implementering från tredje part

Exempel-API:et från tredje part är en enkel slutpunkt som returnerar ett slumpmässigt tal mellan 1 och 999. API:et skyddas med en åtkomstnyckel som du måste ange i begäran för att få åtkomst till slutpunkten. I demonstrationssyfte distribueras det här API:et till slutpunkten https://msdocs-example-api.azurewebsites.net/api/RandomNumber. Om du vill anropa API:et måste du dock ange åtkomstnyckeln d0c5atM1cr0s0ft antingen i en ?code= URL-parameter eller i en 'x-functions-key' egenskap för HTTP-huvudet. När du till exempel har distribuerat appen och API:et kan du prova den här URL:en i en webbläsare eller curl: https://msdocs-example-api.azurewebsites.net/api/RandomNumber?code=d0c5atM1cr0s0ft.

Om åtkomstnyckeln är giltig returnerar slutpunkten ett JSON-svar som innehåller en enda egenskap, "value", vars värde är ett tal mellan 1 och 999, till exempel {"value": 959}.

Slutpunkten implementeras i Python och distribueras till Azure Functions. Koden är följande:

import logging
import random
import json

import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('RandomNumber invoked via HTTP trigger.')

    random_value = random.randint(1, 1000)
    dict = { "value" : random_value }
    return func.HttpResponse(json.dumps(dict))

På exempellagringsplatsen finns den här koden under third_party_api/RandomNumber/__init__.py. Mappen RandomNumber innehåller namnet på funktionen och __init__.py innehåller koden. En annan fil i mappen ,function.json, beskriver när funktionen utlöses. Andra filer i den third_party_api överordnade mappen innehåller information om azure-funktionsappen som är värd för själva funktionen.

För att distribuera koden utför exemplets etableringsskript följande steg:

  1. Skapa ett säkerhetskopieringslagringskonto för Azure Functions med Azure CLI-kommandot az storage account create för att hantera tillstånd och interna åtgärder.

  2. Skapa en Azure Functions-app med Azure CLI-kommandot . az function app create

  3. När det har gått 60 sekunder och värden är helt etablerad, distribuerar du koden med hjälp av kommandot Azure Functions Core Toolsfunc azure functionapp publish.

  4. Tilldela åtkomstnyckeln, d0c5atM1cr0s0ft, till funktionen. (Se Skydda Azure Functions för en bakgrund på funktionsnycklar.)

    I etableringsskriptet utförs det här steget med hjälp av kommandot az functionapp function keys set Azure CLI.

    Kommentarer ingår för att visa hur du gör det här steget via ett REST API-anrop till Functions Key Management-API :et om så önskas. Om du vill anropa rest-API:et måste ett annat REST API-anrop göras först för att hämta funktionsappens huvudnyckel.

Du kan också tilldela åtkomstnycklar via Azure-portalen. På sidan för Functions-appen väljer du Funktioner och sedan den specifika funktion som ska skyddas (som namnges RandomNumber i det här exemplet). På funktionens sida väljer du Funktionsnycklar för att öppna sidan där du kan skapa och hantera dessa nycklar.