Я работаю над веб-сайтом, который позволит пользователям входить в систему с использованием учетных данных OAuth, таких как Twitter, Google и т. Д. Для этого мне нужно зарегистрироваться у этих различных провайдеров и получить суперсекретный ключ API, который у меня есть. защищать залогами от различных частей тела. Если мой ключ будет взломан, часть будет вырвана.
Ключ API должен путешествовать с моим источником, так как он используется во время выполнения для выполнения запросов аутентификации. В моем случае ключ должен существовать в приложении в файле конфигурации или в самом коде. Это не проблема, когда я создаю и публикую с одного компьютера. Однако, когда мы добавляем управление исходным кодом в микс, все становится сложнее.
Поскольку я дешевый ублюдок, я бы предпочел использовать бесплатные сервисы контроля версий, такие как TFS в облаке или GitHub. Это оставляет меня с небольшой загадкой:
Как я могу сохранить свое тело нетронутым, когда мои ключи API находятся в моем коде, и мой код доступен в общедоступном хранилище?
Я могу придумать несколько способов справиться с этим, но ни один из них не является настолько удовлетворительным.
- Я мог бы удалить всю личную информацию из кода и отредактировать ее после развертывания. Это было бы очень трудно реализовать (я не буду подробно описывать многие способы), и это не вариант.
- Я мог бы зашифровать это. Но, как я должен расшифровать, любой, у кого есть источник, может понять, как это сделать. Бессмысленно.
- Я мог бы заплатить за частный контроль источника. LOL J / K тратить деньги? Пожалуйста.
- Я мог бы использовать языковые функции, чтобы отделить конфиденциальную информацию от остальной части моего источника и, следовательно, сохранить ее от контроля источников. Это то, что я делаю сейчас, но это может быть легко испорчено, по ошибке проверив секретный файл.
Я действительно ищу гарантированный способ гарантировать, что я не делюсь своими привилегиями со всем миром (за исключением Snapchat), который будет бесперебойно работать в процессе разработки, отладки и развертывания, а также быть надежным. Это совершенно нереально. Так что реально я могу сделать?
Технические детали: VS2012, C # 4.5, контроль версий будет либо TF-сервисом, либо GitHub. В настоящее время используется частичный класс для разделения чувствительных ключей в отдельном файле .cs, который не будет добавлен в систему контроля версий. Я думаю, что GitHub может иметь преимущество, так как .gitignore может быть использован, чтобы гарантировать, что частичный файл класса не зарегистрирован, но я облажался с этим раньше. Я надеюсь на «о, общая проблема, вот как вы это делаете», но мне, возможно, придется согласиться на то, «что это не так много, как могло бы», /