你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Azure Monitor Log Analytics API 设置身份验证和授权

若要为 Azure Monitor Log Analytics API 设置身份验证和授权,请执行以下操作:

设置身份验证

  1. 设置 Azure 目录。 在安装过程中,请在相关步骤中使用以下设置:
    • 当系统询问要连接到的 API 时,选择“我的组织使用的 API”,然后搜索“Log Analytics API”。
    • 对于 API 权限,选择“委托的权限”。
  2. 完成 Active Directory 安装后,请求授权令牌
  3. (可选)如果只想在非生产环境中使用示例数据,请使用 API 密钥进行身份验证。

请求获取授权令牌

在开始之前,请确保你拥有成功进行 OAuth2 调用所需的所有值。 所有请求都需要:

  • 你的 Azure AD 租户
  • 你的工作区 ID
  • 你的 Azure AD 应用的客户端 ID
  • Azure AD 应用的客户端密码(在 Azure AD 应用菜单栏中称为“密钥”)。

客户端凭据流

在客户端凭据流中,令牌与 ARM 终结点一起使用。 使用 Azure AD 应用设置期间提供的应用程序权限发出单个请求以接收令牌。 请求的资源为:https://management.azure.com。 还可使用此流向 https://api.loganalytics.io 请求令牌。 替换以下示例中的“resource”。

客户端凭据令牌 URL(POST 请求)

    POST /YOUR_AAD_TENANT/oauth2/token HTTP/1.1
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials
    &client_id=YOUR_CLIENT_ID
    &redirect_uri=YOUR_REDIRECT_URI
    &resource=https://management.azure.com/
    &client_secret=YOUR_CLIENT_SECRET

成功的请求接收访问令牌:

    {
        "token_type": "Bearer",
        "expires_in": "3600",
        "ext_expires_in": "0",
        "expires_on": "1505929459",
        "not_before": "1505925559",
        "resource": "https://management.azure.com/",
        "access_token": "ey.....A"
    }

该令牌可用于针对 ARM API 终结点进行授权:

    GET https://management.azure.com/subscriptions/6c3ac85e-59d5-4e5d-90eb-27979f57cb16/resourceGroups/demo/providers/Microsoft.OperationalInsights/workspaces/demo-ws/api/query
    
    Authorization: Bearer <access_token>
    Prefer: response-v1=true
    
    {
        "query": "AzureActivity | limit 10"
    }

示例响应:

    {
        "tables": [
            {
                "name": "PrimaryResult",
                "columns": [
                    {
                        "name": "OperationName",
                        "type": "string"
                    },
                    {
                        "name": "Level",
                        "type": "string"
                    },
                    {
                        "name": "ActivityStatus",
                        "type": "string"
                    }
                ],
                "rows": [
                    [
                        "Metric Alert",
                        "Informational",
                        "Resolved",
                        ...
                    ],
                    ...
                ]
            },
            ...
        ]
    }

授权代码流

支持的主要 OAuth2 流是通过授权代码实现的。 此方法需要两个 HTTP 请求来获取用于调用 Azure Monitor Log Analytics API 的令牌。 有两个 URL,每个请求有一个终结点。 它们的格式为:

授权代码 URL(GET 请求):

    GET https://login.microsoftonline.com/YOUR_Azure AD_TENANT/oauth2/authorize?
    client_id=YOUR_CLIENT_ID
    &response_type=code
    &redirect_uri=YOUR_REDIRECT_URI
    &resource=https://api.loganalytics.io

向授权 URL 发出请求时,client_id 是 Azure AD 应用的应用程序 ID(从应用的属性菜单中复制)。 redirect_uri 是来自同一 Azure AD 应用的主页/登录 URL。 请求成功时,此终结点会将你重定向到你在注册时提供的登录页,并将授权代码追加到 URL。 请参阅以下示例:

    http://YOUR_REDIRECT_URI/?code=AUTHORIZATION_CODE&session_state=STATE_GUID

此时,你已获得授权代码,现在需要使用该代码来请求访问令牌。

授权代码令牌 URL(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=YOUR_CLIENT_ID
    &code=AUTHORIZATION_CODE
    &redirect_uri=YOUR_REDIRECT_URI
    &resource=https://api.loganalytics.io
    &client_secret=YOUR_CLIENT_SECRET

所有值都与以前相同,只是增加了一些值。 该授权代码与在成功重定向后在上一个请求中收到的代码相同。 该代码与从 Azure AD 应用获取的密钥结合在一起。 如果未保存该密钥,可将其删除,并从 Azure AD 应用菜单的“密钥”选项卡中创建一个新密钥。 响应是包含具有以下架构的令牌的 JSON 字符串。 在不应更改确切值的情况下指明了确切值。 为令牌值指明了类型。

响应示例:

    {
        "access_token": "YOUR_ACCESS_TOKEN",
        "expires_in": "3600",
        "ext_expires_in": "1503641912",
        "id_token": "not_needed_for_log_analytics",
        "not_before": "1503638012",
        "refresh_token": "YOUR_REFRESH_TOKEN",
        "resource": "https://api.loganalytics.io",
        "scope": "Data.Read",
        "token_type": "bearer"
    }

此响应的访问令牌部分是在 Authorization: Bearer 标头中提供给 Log Analytics API 的内容。 将来如果令牌过时,还可以使用刷新令牌来获取新的 access_token 和 refresh_token。 对于此请求,格式和终结点为:

    POST /YOUR_AAD_TENANT/oauth2/token HTTP/1.1
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    client_id=YOUR_CLIENT_ID
    &refresh_token=YOUR_REFRESH_TOKEN
    &grant_type=refresh_token
    &resource=https://api.loganalytics.io
    &client_secret=YOUR_CLIENT_SECRET

响应示例:

    {
      "token_type": "Bearer",
      "expires_in": "3600",
      "expires_on": "1460404526",
      "resource": "https://api.loganalytics.io",
      "access_token": "YOUR_TOKEN_HERE",
      "refresh_token": "YOUR_REFRESH_TOKEN_HERE"
    }

隐式代码流

Log Analytics API 还支持 OAuth2 隐式流。 对于此流,只需要单个请求,但无法获取刷新令牌。

隐式代码授权 URL

    GET https://login.microsoftonline.com/YOUR_AAD_TENANT/oauth2/authorize?
    client_id=YOUR_CLIENT_ID
    &response_type=token
    &redirect_uri=YOUR_REDIRECT_URI
    &resource=https://api.loganalytics.io

成功的请求将使用 URL 中的令牌生成到你的重定向 URI 的重定向,如下所示。

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

此 access_token 在传递给 Log Analytics API 以授权请求时可用作 Authorization: Bearer 标头值。

使用 API 密钥进行身份验证

要想在不需要使用 Azure AD 身份验证的情况下快速浏览 API,请使用包含示例数据的演示工作区,因为它支持 API 密钥身份验证。

要对示例工作区进行身份验证和运行查询,请使用 DEMO_WORKSPACE 作为 {workspace-id} 并传入 API 密钥 DEMO_KEY

如果应用程序 ID 或 API 密钥不正确,API 服务将返回 403(禁止)错误。

API 密钥 DEMO_KEY 可以通过三种不同的方式传入,具体取决于你是希望使用 URL、标头还是基本身份验证。

  1. 自定义标头:在自定义标头 X-Api-Key 中提供 API 密钥
  2. 查询参数:在 URL 参数 api_key 中提供 API 密钥
  3. 基本身份验证:提供 API 密钥作为用户名或密码。 如果同时提供这两个,则 API 密钥必须位于用户名中。

下面的示例使用标头中的工作区 ID 和 API 密钥:

    POST https://api.loganalytics.io/v1/workspaces/DEMO_WORKSPACE/query
    X-Api-Key: DEMO_KEY
    Content-Type: application/json
    
    {
        "query": "AzureActivity | summarize count() by Category"
    }

更多信息

可以在此处找到有关使用 Azure AD 的 OAuth2 的文档: