Загрузка…
Загрузка…
Go · junior · сложность 4
В микросервисах аутентификация обычно строится вокруг централизованного поставщика удостоверений (IdP) и модели, ориентированной на токен (чаще всего OAuth2/OIDC + JWT). Это позволяет масштабировать доступ без дублирования логики входа в каждый сервис.
Клиент входит в IdP (или службу аутентификации).
Получает токен доступа (и, при необходимости, токен обновления).
Передаёт токен доступа в запросах к API-шлюзу/сервисам.
Сервисы проверяют токен (подпись, срок действия, эмитент, аудитория, области применения).
повторная проверка критических претензий/прав доступа;
не полагайтесь только на периметр.
Идентификатор пользователя/субъекта (sub).
Роли/области деятельности/права (необходимый минимум).
iss, aud, exp, iat для проверки безопасного контекста.
Короткий TTL для токена доступа.
Регулярная ротация ключей подписи (JWKS).
TLS везде (трафик север-юг и восток-запад).
Принцип наименьших привилегий для областей/ролей.
Четкое разделение аутентификации (кто вы) и авторизации (что вы могу сделать).
Используйте отдельные учетные данные компьютера (учетные данные клиента, mTLS, сервисные личность).
Не сбрасывайте токены пользователей без необходимости глубоко в систему.
Надежная аутентификация в микросервисах — это централизованный IdP, токены с корректной проверкой на всех критических границах и дисциплина безопасности (TTL, ротация ключей, минимальные привилегии, TLS, эшелонированная защита).
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
tok := strings.TrimPrefix(r.Header.Get("Authorization"), "Bearer ")
claims, err := verifyJWT(tok)
if err != nil {
http.Error(w, "unauthorized", http.StatusUnauthorized)
return
}
ctx := context.WithValue(r.Context(), userClaimsKey{}, claims)
next.ServeHTTP(w, r.WithContext(ctx))
})
}В микросервисах аутентификация обычно строится вокруг централизованного поставщика удостоверений (IdP) и модели, ориентированной на токен (чаще всего OAuth2/OIDC + JWT).