Устранение неполадок

Ниже перечислены распространённые проблемы, возникающие при настройке аутентификации SAML в Grafana, и способы их устранения.

Устранение неполадок аутентификации SAML в Grafana

Чтобы устранить неполадки и получить больше информации в логах, включите отладочное логирование SAML в файле конфигурации. Дополнительную информацию см. в разделе Конфигурация.

ini
[log]
filters = saml.auth:debug

Бесконечный цикл перенаправлений / Пользователь перенаправляется на страницу входа после успешного входа на стороне IdP

Если вы сталкиваетесь с бесконечным циклом перенаправлений при auto_login = true или перенаправлением на страницу входа после успешного входа, вероятно, настройка SameSite cookie grafana_session установлена в Strict. Эта настройка не позволяет cookie grafana_session отправляться в Grafana во время межсайтовых запросов. Чтобы решить эту проблему, установите параметр security.cookie_samesite в Lax в файле конфигурации Grafana.

Аутентификация SAML завершается неудачей с ошибкой:

  • asn1: structure error: tags don't match

Мы поддерживаем только один формат приватного ключа: PKCS#8.

Ключи могут быть в другом формате (PKCS#1 или PKCS#12); в этом случае может потребоваться преобразование формата приватного ключа.

Следующая команда создаёт файл ключа pkcs8.

Bash
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

Преобразование формата приватного ключа в base64

Следующая команда преобразует ключи в формат base64.

Кодируйте файлы cert.pem и key.pem в base64: (переключатель -w0 не нужен на Mac, только для Linux)

sh
$ base64 -w0 key.pem > key.pem.base64
$ base64 -w0 cert.pem > cert.pem.base64

Значения в кодировке base64 (файлы key.pem.base64, cert.pem.base64) затем используются для certificate и private_key.

Предоставляемые вами ключи должны выглядеть так:

-----BEGIN PRIVATE KEY-----
...
...
-----END PRIVATE KEY-----

Попытки входа SAML завершаются неудачей с ответом на запрос origin not allowed

Когда пользователь входит с помощью SAML и получает origin not allowed, возможно, пользователь выполняет вход из службы IdP (провайдера идентификации) или пользователь находится за обратным прокси. Это потенциально происходит потому, что проверки CSRF в Grafana считают запросы недействительными. Дополнительную информацию см. CSRF.

Чтобы решить эту проблему, вы можете настроить параметр csrf_trusted_origins или csrf_additional_headers в конфигурации SAML.

Пример файла конфигурации:

ini
# config.ini
...
[security]
csrf_trusted_origins = https://grafana.example.com
csrf_additional_headers = X-Forwarded-Host
...

Попытки входа SAML завершаются неудачей с ответом на запрос “login session has expired”

Доступ к странице входа Grafana по URL, который не является корневым URL сервера Grafana, может вызвать возврат экземпляром следующей ошибки: “login session has expired”.

Если вы получаете доступ к Grafana через прокси-сервер, убедитесь, что cookie корректно перезаписываются на корневой URL Grafana. Cookie должны быть установлены на том же URL, что и root_url Grafana. Обычно это домен/адрес обратного прокси.

Проверьте настройки cookie в конфигурации вашего прокси-сервера, чтобы убедиться, что cookie не отбрасываются

Проверьте следующие настройки в вашей конфигурации Grafana:

ini
[security]
cookie_samesite = lax

Эта настройка должна быть установлена в lax, чтобы позволить сессионным cookie Grafana корректно работать с перенаправлениями.

ini
[security]
cookie_secure = true

Для повышения безопасности установите cookie_secure в true, что заставляет cookie отправляться только через HTTPS.

Устранение неполадок вызовов Graph API

При настройке аутентификации SAML с Entra ID вы можете столкнуться с проблемами с вызовами Graph API. Это может произойти, если приложение Entra ID неправильно настроено для разрешения доступа к Graph API.

Чтобы помочь в процессе устранения неполадок, протестируйте вызовы Graph API с помощью следующих команд:

Bash
curl -X POST "{token_url}" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}&scope=https://graph.microsoft.com/.default"

Где следующие значения берутся из вашей конфигурации SAML:

  • token_url: URL токена вашего приложения Entra ID.
  • client_id: client ID вашего приложения Entra ID.
  • client_secret: client secret вашего приложения Entra ID.

Ответ должен выглядеть так:

JSON
{
  "access_token": "...ACCESS_TOKEN...",
  "token_type": "Bearer",
  "expires_in": 3600
}

Используйте access_token для тестирования вызовов Graph API.

Bash
curl -X GET "https://graph.microsoft.com/v1.0/groups" \
  -H "Authorization: Bearer ${access_token}" \
  -H "Content-Type: application/json"

Ответ должен выглядеть так:

JSON
{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(Edm.String)",
  "value": ["29f2e7c8-9b9d-443c-bc62-7d8cdcfcfe59", "f0224e82-0eb8-4eda-8979-0c36e98deb00"]
}

Если второй вызов завершается неудачей из-за 401 или 403, вам может потребоваться проверить настройки приложения Entra ID, чтобы убедиться, что доступ к Graph API включён.