Ответ 1
Резюме. Я бы просто рискнул и сохранил секрет в клиентском приложении.
Альтернатива прокси-сервера:
Единственный способ, с помощью которого вы можете разумно смягчить проблемы, перечисленные ниже, и сделать работу с прокси-сервером, состоял бы в том, чтобы пройти целых девять ярдов - переместить всю бизнес-логику для работы с ресурсами стороннего веб-сервиса с вашим прокси-сервером сервер и сделать клиентский терминал немым терминалом с богатым пользовательским интерфейсом. Таким образом, единственные действия, которые вредоносные приложения могли бы сделать, чтобы прокси выполнял от его имени, были бы только тем, что необходимо для вашей бизнес-логики.
Но теперь вы попадаете в сферу целого ряда других проблем, связанных с надежностью и масштабируемостью.
Долгое обсуждение того, почему простой прокси не работал:
Некоторые люди, столкнувшись с проблема, подумайте: "Я знаю, я добавлю собственный прокси-сервер" Теперь у них есть два проблемы. (с извинениями перед Джейми Завински)
Ваши предположения в основном правы. До того момента, когда вы начинаете думать о своем собственном сервере, независимо от того, хранит ли он секрет и проксирует вызовы для клиентского приложения или пытается определить, является ли приложение легитимным и дает ему секрет. В обоих подходах вам все равно придется решить проблему "это запрос, исходящий из фрагмента кода, который я написал"?
Позвольте мне повторить - нет способа различить на проводе, что работает определенная часть программного обеспечения. Если данные в сообщениях выглядят правильно, ничто не может доказать это другим приложением, отправляющим это сообщение.
В конце дня, если я пишу вредоносное приложение, мне все равно, действительно ли я знаю реальный секрет, пока я могу сделать кого-то, кто знает, что это работает от моего имени. Итак, если вы считаете, что вредоносное приложение может олицетворять ваше приложение на сторонних серверах OAuth, почему вы уверены, что он не может олицетворять ваше приложение своим прокси?
Но подождите, там еще. Домен, в котором расположен ваш прокси-сервис, является вашей личностью как вашим клиентам, так и поставщику OAuth (как показано конечным пользователем поставщиком OAuth). Если вредоносное приложение может сделать ваш сервер плохим, не только ваш ключ отозван, но и ваш общедоступный веб-идентификатор также не будет доверять больше.
Я начну с очевидного - нет способа отличить на проводе конкретную часть программного обеспечения. Если данные в сообщениях выглядят правильно, ничто не может доказать это другое приложение, отправляющее это сообщение.
Таким образом, любой алгоритм, который опирается на секретный файл, хранящийся на стороне приложения, может быть подделан. Сила OAuth заключается в том, что она никогда не дает учетных данных пользователя для приложения, вместо этого предоставляет временные учетные данные приложения, которые пользователь может аннулировать при необходимости.
Конечно, слабый момент в том, что достаточно хорошее приложение может заставить пользователя доверять ему и не отзывать учетные данные, прежде чем он завершит свои нечестные поступки.
Однако одним из способов смягчения этого является подход Google к использованию трехстороннего OAuth, а не стандартного двухногих. В трехстороннем OAuth нет предварительно назначенного секрета, но при каждой аутентификации выдается новый секретный токен доступа вместе с каждым токеном доступа. Хотя в конечном итоге это страдает от того же недостатка, поскольку плохое приложение может прочитать хороший токен токена приложения из своего процесса, это приводит к тому, что пользователь должен одобрять доступ к приложению каждый раз, когда ему нужен новый токен доступа.
И, конечно же, это также означает, что это немного неудобно и раздражает для пользователя.