Akses API Application Insights dengan autentikasi Microsoft Entra

Anda dapat mengirimkan permintaan kueri dengan menggunakan titik https://api.applicationinsights.ioakhir Application Insights Azure Monitor . Untuk mengakses titik akhir, Anda harus mengautentikasi melalui ID Microsoft Entra.

Mengonfigurasikan autentikasi

Untuk mengakses API, Anda mendaftarkan aplikasi klien dengan ID Microsoft Entra dan meminta token.

  1. Daftarkan aplikasi di ID Microsoft Entra.

  2. Pada halaman gambaran umum aplikasi, pilih Izin API.

  3. Pilih Tambahkan izin.

  4. Pada tab API yang digunakan organisasi saya, cari Application Insights dan pilih Application Insights API dari daftar.

  5. Pilih Izin yang didelegasikan.

  6. Pilih kotak centang Data.Read .

  7. Pilih Tambahkan izin.

Sekarang setelah aplikasi Anda terdaftar dan memiliki izin untuk menggunakan API, berikan aplikasi Anda akses ke sumber daya Application Insights Anda.

  1. Dari halaman gambaran umum sumber daya Application Insights Anda, pilih Kontrol akses (IAM).

  2. Pilih Tambahkan penetapan peran.

  3. Pilih peran Pembaca lalu pilih Anggota.

  4. Pada tab Anggota , pilih Pilih anggota.

  5. Masukkan nama aplikasi Anda di kotak Pilih .

  6. Pilih aplikasi Anda dan pilih Pilih.

  7. Pilih Tinjau + tetapkan.

  8. Setelah Anda menyelesaikan penyiapan dan izin Direktori Aktif, minta token otorisasi.

Catatan

Untuk contoh ini, kami menerapkan peran Pembaca. Peran ini adalah salah satu dari banyak peran bawaan dan mungkin menyertakan lebih banyak izin daripada yang Anda butuhkan. Peran dan izin yang lebih terperinci dapat dibuat.

Meminta token otorisasi

Sebelum memulai, pastikan Anda memiliki semua nilai yang diperlukan untuk membuat permintaan berhasil. Semua permintaan memerlukan:

  • ID penyewa Microsoft Entra Anda.
  • ID Aplikasi App Insights Anda - Jika saat ini Anda menggunakan Kunci API, ini adalah ID aplikasi yang sama.
  • ID klien Microsoft Entra Anda untuk aplikasi.
  • Rahasia klien Microsoft Entra untuk aplikasi.

API Application Insights mendukung autentikasi Microsoft Entra dengan tiga alur Microsoft Entra ID OAuth2 yang berbeda:

  • Informasi masuk klien
  • Kode otorisasi
  • Implisit

Alur Info masuk Klien

Dalam alur kredensial klien, token digunakan dengan titik akhir Application Insights. Satu permintaan dibuat untuk menerima token dengan menggunakan kredensial yang disediakan untuk aplikasi Anda di langkah sebelumnya saat Anda mendaftarkan aplikasi di ID Microsoft Entra.

https://api.applicationinsights.io Gunakan titik akhir.

URL token kredensial klien (permintaan POST)

    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>

Permintaan yang berhasil menerima token akses dalam respons:

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

Gunakan token dalam permintaan ke titik akhir Application Insights:

    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"
    }

Contoh respons:

  "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"
        ]
      ]
    }
  ]
}

Alur kode otorisasi

Aliran OAuth2 utama yang didukung adalah melalui kode otorisasi. Metode ini memerlukan dua permintaan HTTP untuk memperoleh token untuk memanggil API Application Insights Azure Monitor. Ada dua URL, dengan satu titik akhir per permintaan. Formatnya dijelaskan di bagian berikut.

URL kode otorisasi (permintaan GET)

    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

Saat permintaan dibuat ke URL otorisasi, client_id adalah ID aplikasi dari aplikasi Microsoft Entra Anda, yang disalin dari menu properti aplikasi. redirect_uri adalah URL beranda/login dari aplikasi Microsoft Entra yang sama. Ketika permintaan berhasil, titik akhir ini mengarahkan Anda ke halaman masuk yang Anda berikan saat mendaftar dengan kode otorisasi yang ditambahkan ke URL. Lihat contoh berikut:

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

Pada titik ini, Anda telah mendapatkan kode otorisasi, yang Anda butuhkan sekarang untuk meminta token akses.

URL token kode otorisasi (permintaan POST)

    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>

Semua nilai sama seperti sebelumnya, dengan beberapa tambahan. Kode otorisasi adalah kode yang sama dengan yang Anda terima dalam permintaan sebelumnya setelah pengalihan berhasil. Kode dikombinasikan dengan kunci yang diperoleh dari aplikasi Microsoft Entra. Jika Anda tidak menyimpan kunci, Anda dapat menghapusnya dan membuat kunci baru dari tab kunci menu aplikasi Microsoft Entra. Responsnya adalah string JSON yang berisi token dengan skema berikut. Jenis ditunjukkan untuk nilai token.

Contoh respons:

    {
        "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"
    }

Bagian token akses dari respons ini adalah apa yang Anda sajikan ke API Application Insights di Authorization: Bearer header. Anda juga dapat menggunakan token refresh di masa mendatang untuk memperoleh access_token baru dan refresh_token ketika token Anda telah basi. Untuk permintaan ini, format dan titik akhir adalah:

    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>

Contoh respons:

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

Alur kode implisit

API Application Insights mendukung alur implisit OAuth2. Untuk alur ini, hanya satu permintaan yang diperlukan, tetapi tidak ada token refresh yang dapat diperoleh.

URL otorisasi kode implisit

    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

Permintaan yang berhasil menghasilkan pengalihan ke URI pengalihan Anda dengan token di URL:

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

Access_token ini dapat digunakan sebagai Authorization: Bearer nilai header saat diteruskan ke API Application Insights untuk mengotorisasi permintaan.