INTEGRITY Документация

Запрос событий входа Access с помощью GraphQL

В этом примере мы используем GraphQL Analytics API, чтобы получить журналы события входа Access. Эти журналы особенно полезны для выяснения того, почему пользователь получил 403 Forbidden, так как они содержат дополнительные данные, не показанные в Access logs на дашборде.

Следующий вызов API запросит журналы для одного события входа Access и выведет запрошенные поля. Запрос аутентификации определяется по его Ray ID, который можно получить в 403 Forbidden, отображаемая пользователю.

Вам нужно будет вставить свой <CLOUDFLARE_ACCOUNT_TAG>, ваши учётные данные API в <API_TOKEN>1, и подставьте собственные значения вместо следующих переменных:

Вызов API

echo '{ "query":
  "query accessLoginRequestsAdaptiveGroups($accountTag: string, $rayId: string, $datetimeStart: string, $datetimeEnd: string) {
    viewer {
      accounts(filter: {accountTag: $accountTag}) {
        accessLoginRequestsAdaptiveGroups(limit: 100, filter: {datetime_geq: $datetimeStart, datetime_leq: $datetimeEnd, cfRayId: $rayId}, orderBy: [datetime_ASC]) {
          dimensions {
            datetime
            isSuccessfulLogin
            hasWarpEnabled
            hasGatewayEnabled
            hasExistingJWT
            approvingPolicyId
            cfRayId
            ipAddress
            userUuid
            identityProvider
            country
            deviceId
            mtlsStatus
            mtlsCertSerialId
            mtlsCommonName
            serviceTokenId
          }
        }
      }
    }
  }",
  "variables": {
    "accountTag": "<CLOUDFLARE_ACCOUNT_TAG>",
    "rayId": "74e4ac510dfdc44f",
    "datetimeStart": "2022-09-20T14:36:38Z",
    "datetimeEnd": "2022-09-22T14:36:38Z"
}
}' | tr -d '\n' | curl --silent \
https://api.cloudflare.com/client/v4/graphql \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data @- | jq .

Ответ

{
  "data": {
    "viewer": {
      "accounts": [
        {
          "accessLoginRequestsAdaptiveGroups": [
            {
              "dimensions": {
                "approvingPolicyId": "",
                "cfRayId": "744927037ce06d68",
                "country": "US",
                "datetime": "2022-09-02T20:56:27Z",
                "deviceId": "",
                "hasExistingJWT": 0,
                "hasGatewayEnabled": 0,
                "hasWarpEnabled": 0,
                "identityProvider": "nonidentity",
                "ipAddress": "2a09:bac0:15::814:7b37",
                "isSuccessfulLogin": 0,
                "mtlsCertSerialId": "",
                "mtlsCommonName": "",
                "mtlsStatus": "NONE",
                "serviceTokenId": "",
                "userUuid": ""
              }
            }
          ]
        }
      ]
    }
  },
  "errors": null
}

Результаты запроса можно сравнить со своими политиками Access, чтобы понять, почему пользователь был заблокирован. Например, если ваше приложение требует действительный сертификат mTLS, Access заблокировал показанный выше запрос, потому что mtlsStatus, mtlsCommonName, а также mtlsCertSerialId пусты.

Сноски

  1. См. Настройте токен Analytics API , где приведены дополнительные сведения о настройке и разрешениях. ↩