Application Insights-API-toegang met Microsoft Entra-verificatie

U kunt een queryaanvraag indienen met behulp van het Azure Monitor Application Insights-eindpunt https://api.applicationinsights.io. Voor toegang tot het eindpunt moet u zich verifiëren via Microsoft Entra-id.

Verificatie instellen

Voor toegang tot de API registreert u een client-app bij Microsoft Entra-id en vraagt u een token aan.

  1. Registreer een app in Microsoft Entra-id.

  2. Selecteer API-machtigingen op de overzichtspagina van de app.

  3. Selecteer Een machtiging toevoegen.

  4. Op de API's die mijn organisatie gebruikt, zoekt u naar Application Insights en selecteert u Application Insights-API in de lijst.

  5. Selecteer Gedelegeerde machtigingen.

  6. Schakel het selectievakje Data.Read in.

  7. Selecteer Machtigingen toevoegen.

Nu uw app is geregistreerd en machtigingen heeft om de API te gebruiken, verleent u uw app toegang tot uw Application Insights-resource.

  1. Selecteer op de overzichtspagina van uw Application Insights-resource toegangsbeheer (IAM).

  2. Selecteer Roltoewijzing toevoegen.

  3. Selecteer de rol Lezer en selecteer vervolgens Leden.

  4. Kies Leden selecteren op het tabblad Leden.

  5. Voer de naam van uw app in het vak Selecteren in.

  6. Selecteer uw app en kies Selecteren.

  7. Selecteer Controleren + toewijzen.

  8. Nadat u de Active Directory-installatie en -machtigingen hebt voltooid, vraagt u een autorisatietoken aan.

Notitie

In dit voorbeeld hebben we de rol Lezer toegepast. Deze rol is een van de vele ingebouwde rollen en kan meer machtigingen bevatten dan u nodig hebt. Er kunnen meer gedetailleerde rollen en machtigingen worden gemaakt.

Een autorisatietoken aanvragen

Voordat u begint, moet u ervoor zorgen dat u alle waarden hebt die nodig zijn om de aanvraag te maken. Voor alle aanvragen is het volgende vereist:

  • Uw Microsoft Entra-tenant-id.
  • Uw App Insights-app-id: als u momenteel API-sleutels gebruikt, is dit dezelfde app-id.
  • Uw Microsoft Entra-client-id voor de app.
  • Een Microsoft Entra-clientgeheim voor de app.

De Application Insights-API ondersteunt Microsoft Entra-verificatie met drie verschillende OAuth2-stromen voor Microsoft Entra-id:

  • Clientreferenties
  • Autorisatiecode
  • Impliciet

Stroom voor clientreferenties

In de clientreferentiestroom wordt het token gebruikt met het Application Insights-eindpunt. Er wordt één aanvraag gedaan om een token te ontvangen met behulp van de referenties die zijn opgegeven voor uw app in de vorige stap wanneer u een app registreert in Microsoft Entra ID.

Gebruik het https://api.applicationinsights.io eindpunt.

Token-URL van clientreferenties (POST-aanvraag)

    POST /<your-tenant-id>/oauth2/token
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials
    &client_id=<app-client-id>
    &resource=https://api.applicationinsights.io
    &client_secret=<app-client-secret>

Een geslaagde aanvraag ontvangt een toegangstoken in het antwoord:

    {
        token_type": "Bearer",
        "expires_in": "86399",
        "ext_expires_in": "86399",
        "access_token": ""eyJ0eXAiOiJKV1QiLCJ.....Ax"
    }

Gebruik het token in aanvragen voor het Application Insights-eindpunt:

    POST /v1/apps/yous_app_id/query?timespan=P1D
    Host: https://api.applicationinsights.io
    Content-Type: application/json
    Authorization: Bearer <your access token>

    Body:
    {
    "query": "requests | take 10"
    }

Voorbeeld van een reactie:

  "tables": [
    {
      "name": "PrimaryResult",
      "columns": [
        {
          "name": "timestamp",
          "type": "datetime"
        },
        {
          "name": "id",
          "type": "string"
        },
        {
          "name": "source",
          "type": "string"
        },
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "url",
          "type": "string"
        },
        {
          "name": "success",
          "type": "string"
        },
        {
          "name": "resultCode",
          "type": "string"
        },
        {
          "name": "duration",
          "type": "real"
        },
        {
          "name": "performanceBucket",
          "type": "string"
        },
        {
          "name": "customDimensions",
          "type": "dynamic"
        },
        {
          "name": "customMeasurements",
          "type": "dynamic"
        },
        {
          "name": "operation_Name",
          "type": "string"
        },
        {
          "name": "operation_Id",
          "type": "string"
        },
        {
          "name": "operation_ParentId",
          "type": "string"
        },
        {
          "name": "operation_SyntheticSource",
          "type": "string"
        },
        {
          "name": "session_Id",
          "type": "string"
        },
        {
          "name": "user_Id",
          "type": "string"
        },
        {
          "name": "user_AuthenticatedId",
          "type": "string"
        },
        {
          "name": "user_AccountId",
          "type": "string"
        },
        {
          "name": "application_Version",
          "type": "string"
        },
        {
          "name": "client_Type",
          "type": "string"
        },
        {
          "name": "client_Model",
          "type": "string"
        },
        {
          "name": "client_OS",
          "type": "string"
        },
        {
          "name": "client_IP",
          "type": "string"
        },
        {
          "name": "client_City",
          "type": "string"
        },
        {
          "name": "client_StateOrProvince",
          "type": "string"
        },
        {
          "name": "client_CountryOrRegion",
          "type": "string"
        },
        {
          "name": "client_Browser",
          "type": "string"
        },
        {
          "name": "cloud_RoleName",
          "type": "string"
        },
        {
          "name": "cloud_RoleInstance",
          "type": "string"
        },
        {
          "name": "appId",
          "type": "string"
        },
        {
          "name": "appName",
          "type": "string"
        },
        {
          "name": "iKey",
          "type": "string"
        },
        {
          "name": "sdkVersion",
          "type": "string"
        },
        {
          "name": "itemId",
          "type": "string"
        },
        {
          "name": "itemType",
          "type": "string"
        },
        {
          "name": "itemCount",
          "type": "int"
        }
      ],
      "rows": [
        [
          "2018-02-01T17:33:09.788Z",
          "|0qRud6jz3k0=.c32c2659_",
          null,
          "GET Reports/Index",
          "http://fabrikamfiberapp.azurewebsites.net/Reports",
          "True",
          "200",
          "3.3833",
          "<250ms",
          "{\"_MS.ProcessedByMetricExtractors\":\"(Name:'Requests', Ver:'1.0')\"}",
          null,
          "GET Reports/Index",
          "0qRud6jz3k0=",
          "0qRud6jz3k0=",
          "Application Insights Availability Monitoring",
          "9fc6738d-7e26-44f0-b88e-6fae8ccb6b26",
          "us-va-ash-azr_9fc6738d-7e26-44f0-b88e-6fae8ccb6b26",
          null,
          null,
          "AutoGen_49c3aea0-4641-4675-93b5-55f7a62d22d3",
          "PC",
          null,
          null,
          "52.168.8.0",
          "Boydton",
          "Virginia",
          "United States",
          null,
          "fabrikamfiberapp",
          "RD00155D5053D1",
          "cf58dcfd-0683-487c-bc84-048789bca8e5",
          "fabrikamprod",
          "5a2e4e0c-e136-4a15-9824-90ba859b0a89",
          "web:2.5.0-33031",
          "051ad4ef-0776-11e8-ac6e-e30599af6943",
          "request",
          "1"
        ],
        [
          "2018-02-01T17:33:15.786Z",
          "|x/Ysh+M1TfU=.c32c265a_",
          null,
          "GET Home/Index",
          "http://fabrikamfiberapp.azurewebsites.net/",
          "True",
          "200",
          "716.2912",
          "500ms-1sec",
          "{\"_MS.ProcessedByMetricExtractors\":\"(Name:'Requests', Ver:'1.0')\"}",
          null,
          "GET Home/Index",
          "x/Ysh+M1TfU=",
          "x/Ysh+M1TfU=",
          "Application Insights Availability Monitoring",
          "58b15be6-d1e6-4d89-9919-52f63b840913",
          "emea-se-sto-edge_58b15be6-d1e6-4d89-9919-52f63b840913",
          null,
          null,
          "AutoGen_49c3aea0-4641-4675-93b5-55f7a62d22d3",
          "PC",
          null,
          null,
          "51.141.32.0",
          "Cardiff",
          "Cardiff",
          "United Kingdom",
          null,
          "fabrikamfiberapp",
          "RD00155D5053D1",
          "cf58dcfd-0683-487c-bc84-048789bca8e5",
          "fabrikamprod",
          "5a2e4e0c-e136-4a15-9824-90ba859b0a89",
          "web:2.5.0-33031",
          "051ad4f0-0776-11e8-ac6e-e30599af6943",
          "request",
          "1"
        ]
      ]
    }
  ]
}

Stroom voor autorisatiecode

De belangrijkste OAuth2-stroom die wordt ondersteund, is via autorisatiecodes. Voor deze methode zijn twee HTTP-aanvragen vereist om een token te verkrijgen waarmee de Azure Monitor Application Insights-API moet worden aangeroepen. Er zijn twee URL's, met één eindpunt per aanvraag. De indelingen worden beschreven in de volgende secties.

URL voor autorisatiecode (GET-aanvraag)

    GET https://login.microsoftonline.com/YOUR_Azure AD_TENANT/oauth2/authorize?
    client_id=<app-client-id>
    &response_type=code
    &redirect_uri=<app-redirect-uri>
    &resource=https://api.applicationinsights.io

Wanneer een aanvraag wordt ingediend bij de autorisatie-URL, is de client_id de toepassings-id van uw Microsoft Entra-app, gekopieerd uit het eigenschappenmenu van de app. De redirect_uri is de startpagina/aanmeldings-URL van dezelfde Microsoft Entra-app. Wanneer een aanvraag is geslaagd, wordt u met dit eindpunt omgeleid naar de aanmeldingspagina die u bij de registratie hebt opgegeven, met de autorisatiecode die is toegevoegd aan de URL. Zie het volgende voorbeeld:

    http://<app-client-id>/?code=AUTHORIZATION_CODE&session_state=STATE_GUID

Op dit moment hebt u een autorisatiecode verkregen die u nu nodig hebt om een toegangstoken aan te vragen.

URL van autorisatiecodetoken (POST-aanvraag)

    POST /YOUR_Azure AD_TENANT/oauth2/token HTTP/1.1
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=authorization_code
    &client_id=<app client id>
    &code=<auth code fom GET request>
    &redirect_uri=<app-client-id>
    &resource=https://api.applicationinsights.io
    &client_secret=<app-client-secret>

Alle waarden zijn hetzelfde als voorheen, met enkele toevoegingen. De autorisatiecode is dezelfde code die u in de vorige aanvraag hebt ontvangen na een geslaagde omleiding. De code wordt gecombineerd met de sleutel die is verkregen uit de Microsoft Entra-app. Als u de sleutel niet hebt opgeslagen, kunt u deze verwijderen en een nieuwe maken via het toetsentabblad van het app-menu Microsoft Entra. Het antwoord is een JSON-tekenreeks die het token bevat met het volgende schema. Typen worden aangegeven voor de tokenwaarden.

Voorbeeldrespons:

    {
        "access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
        "expires_in": "3600",
        "ext_expires_in": "1503641912",
        "id_token": "not_needed_for_app_insights",
        "not_before": "1503638012",
        "refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az",
        "resource": "https://api.applicationinsights.io",
        "scope": "Data.Read",
        "token_type": "bearer"
    }

Het toegangstokengedeelte van dit antwoord is wat u in de Authorization: Bearer header aan de Application Insights-API presenteert. U kunt het vernieuwingstoken ook in de toekomst gebruiken om een nieuwe access_token en refresh_token te verkrijgen wanneer uw gegevens verlopen zijn. Voor deze aanvraag zijn de indeling en het eindpunt:

    POST /YOUR_AAD_TENANT/oauth2/token HTTP/1.1
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    client_id=<app-client-id>
    &refresh_token=<refresh-token>
    &grant_type=refresh_token
    &resource=https://api.applicationinsights.io
    &client_secret=<app-client-secret>

Voorbeeldrespons:

    {
      "token_type": "Bearer",
      "expires_in": "3600",
      "expires_on": "1460404526",
      "resource": "https://api.applicationinsights.io",
      "access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
      "refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az"
    }

Impliciete codestroom

De Application Insights-API ondersteunt de impliciete OAuth2-stroom. Voor deze stroom is slechts één aanvraag vereist, maar er kan geen vernieuwingstoken worden verkregen.

Impliciete code autoriseren URL

    GET https://login.microsoftonline.com/YOUR_AAD_TENANT/oauth2/authorize?
    client_id=<app-client-id>
    &response_type=token
    &redirect_uri=<app-redirect-uri>
    &resource=https://api.applicationinsights.io

Een geslaagde aanvraag produceert een omleiding naar uw omleidings-URI met het token in de URL:

    http://YOUR_REDIRECT_URI/#access_token=YOUR_ACCESS_TOKEN&token_type=Bearer&expires_in=3600&session_state=STATE_GUID

Deze access_token kan worden gebruikt als de Authorization: Bearer headerwaarde wanneer deze wordt doorgegeven aan de Application Insights-API om aanvragen te autoriseren.