← Аналитика / analytics / graphql-api / tutorials
Запрос событий входа Access с помощью GraphQL
В этом примере мы используем GraphQL Analytics API, чтобы получить журналы события входа Access. Эти журналы особенно полезны для выяснения того, почему пользователь получил 403 Forbidden, так как они содержат дополнительные данные, не показанные в Access logs на дашборде.
Следующий вызов API запросит журналы для одного события входа Access и выведет запрошенные поля. Запрос аутентификации определяется по его Ray ID, который можно получить в 403 Forbidden, отображаемая пользователю.
Вам нужно будет вставить свой <CLOUDFLARE_ACCOUNT_TAG>, ваши учётные данные API в <API_TOKEN>1, и подставьте собственные значения вместо следующих переменных:
rayID: Уникальный идентификатор, присвоенный запросу аутентификации.datetimeStart: Самое раннее время события, к которому можно обратиться (не раньше 16 сентября 2022 года).datetimeEnd: Самое позднее время события, к которому можно обратиться. Обязательно укажите временной диапазон, включающий нужное вам событие входа.
Вызов 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 пусты.
Сноски
-
См. Настройте токен Analytics API , где приведены дополнительные сведения о настройке и разрешениях. ↩