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