OAuth2: использование PKCE вместо client_secret
У меня есть веб-приложение, которое использует неявный грант OAuth2 для аутентификации.
Я бы хотел, чтобы моя сессия была активной в течение длительного времени, используя токены обновления. Но так как я не могу безопасно хранить client_secret в веб-приложении, я не могу использовать традиционное предоставление кода авторизации.
Безопасно ли использовать PKCE вместо client_secret или я теряю некоторый уровень безопасности при этом?
2 ответа
Да. Хотя PKCE более безопасен, чем НЕ использует его; неявное предоставление с PKCE все еще оставляет маркер доступа, который может быть выставлен владельцу ресурса и, возможно, другим приложениям, расположенным на том же устройстве.
PKCE в первую очередь защищает от того, когда злоумышленник перехватывает код авторизации, возвращенный из конечной точки авторизации в пределах канала связи, не защищенного с помощью безопасности транспортного уровня (TLS).
Implicit Flow подходит только для клиентских приложений OAuth на основе браузера или мобильных устройств JavaScript NOT, а также других приложений, которые могут использовать код авторизации.
С неявным предоставлением вы не можете использовать ни PKCE, ни токены обновления. Если вы хотите улучшить безопасность, то вам следует добавить серверную часть в ваше веб-приложение, которое может хранить client_secret
(или используйте альтернативный метод аутентификации клиента). PKCE не понадобится.