Устранение неполадок
Ниже перечислены распространённые проблемы, возникающие при настройке аутентификации SAML в Grafana, и способы их устранения.
Устранение неполадок аутентификации SAML в Grafana
Чтобы устранить неполадки и получить больше информации в логах, включите отладочное логирование SAML в файле конфигурации. Дополнительную информацию см. в разделе Конфигурация.
[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.
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)
$ 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.
Пример файла конфигурации:
# 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:
[security]
cookie_samesite = lax
Эта настройка должна быть установлена в lax, чтобы позволить сессионным cookie Grafana корректно работать с перенаправлениями.
[security]
cookie_secure = true
Для повышения безопасности установите cookie_secure в true, что заставляет cookie отправляться только через HTTPS.
Устранение неполадок вызовов Graph API
При настройке аутентификации SAML с Entra ID вы можете столкнуться с проблемами с вызовами Graph API. Это может произойти, если приложение Entra ID неправильно настроено для разрешения доступа к Graph API.
Чтобы помочь в процессе устранения неполадок, протестируйте вызовы Graph API с помощью следующих команд:
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.
Ответ должен выглядеть так:
{
"access_token": "...ACCESS_TOKEN...",
"token_type": "Bearer",
"expires_in": 3600
}
Используйте access_token для тестирования вызовов Graph API.
curl -X GET "https://graph.microsoft.com/v1.0/groups" \
-H "Authorization: Bearer ${access_token}" \
-H "Content-Type: application/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 включён.