Я собираюсь создать делегированную систему входа в систему для существующего приложения. Я буду реализовывать как клиент OAuth (в веб-приложении), так и сервер OAuth (простой сервер авторизации и ресурсов, у которого на данный момент действительно есть только пользовательский ресурс).
Имея это в виду, я натолкнулся на следующий раздел в текущем проекте OAuth 2 (версия 22):
3.1.2.1. Endpoint Request Confidentiality
If a redirection request will result in the transmission of an
authorization code or access token over an open network (between the
resource owner's user-agent and the client), the client SHOULD
require the use of a transport-layer security mechanism.
Lack of transport-layer security can have a severe impact on the
security of the client and the protected resources it is authorized
to access. The use of transport-layer security is particularly
critical when the authorization process is used as a form of
delegated end-user authentication by the client (e.g. third-party
sign-in service).
Это специально предупреждает меня, что я должен использовать TLS на клиенте. Конечно, мы будем использовать HTTPS на сервере, но включить HTTPS на всех клиентах будет сложно, если не невозможно.
Из моего ограниченного понимания безопасности я полагаю, что кто-то может украсть разрешение. Это подводит меня к моему вопросу:
Не будет ли аутентификация клиента (с использованием секрета клиента) не позволит перехватчику использовать грант авторизации? (Поскольку, надеюсь, злоумышленник не узнает секрет клиента). )
Если этого не произойдет, или если здесь нет другого вектора атаки, могу ли я что-нибудь сделать, чтобы это работало безопасно без HTTPS на клиентах? Поможет ли, например, OAuth 1? (Возможно, потому что у него есть дополнительный шаг токена запроса.)
P.S .: Я планировал провести аутентификацию клиента, используя сертификаты клиента TLS, а не секреты, если это улучшит ситуацию.