Pracuję nad witryną, która pozwoli użytkownikom zalogować się przy użyciu poświadczeń OAuth takich jak Twitter, Google itp. Aby to zrobić, muszę się zarejestrować u różnych dostawców i uzyskać super tajny klucz API, który mam w celu zabezpieczenia przyrzeczeniami przeciw różnym częściom ciała. Jeśli mój klucz zostanie zasadzony, część zostanie wyrwana.
Klucz API musi podróżować z moim źródłem, ponieważ jest używany w czasie wykonywania do wykonywania żądań uwierzytelnienia. W moim przypadku klucz musi istnieć w aplikacji w pliku konfiguracyjnym lub w samym kodzie. Nie stanowi to problemu, gdy buduję i publikuję z jednego komputera. Jednak kiedy wrzucamy kontrolę źródła do miksu, sprawy stają się bardziej skomplikowane.
Ponieważ jestem tanim dranem, wolałbym korzystać z bezpłatnych usług kontroli źródła, takich jak TFS w chmurze lub GitHub. To pozostawia mi lekką zagadkę:
Jak mogę zachować moje ciało nienaruszone, gdy moje klucze API znajdują się w moim kodzie, a mój kod jest dostępny w publicznym repozytorium?
Mogę wymyślić wiele sposobów, aby sobie z tym poradzić, ale żaden z nich nie jest tak satysfakcjonujący.
- Mogę usunąć wszystkie prywatne informacje z kodu i edytować je ponownie po wdrożeniu. Byłby to poważny ból do wdrożenia (nie będę szczegółowo opisywać wielu sposobów) i nie jest opcją.
- Mógłbym to zaszyfrować. Ale ponieważ muszę go odszyfrować, każdy ze źródłem może wymyślić, jak to zrobić. Bezcelowy.
- Mógłbym zapłacić za prywatną kontrolę źródła. LOL j / k wydawać pieniądze? Proszę.
- Mógłbym użyć funkcji językowych, aby oddzielić wrażliwe informacje od reszty mojego źródła, a tym samym uniemożliwić kontrolę źródła. To właśnie robię teraz, ale można to łatwo zepsuć, błędnie sprawdzając tajny plik.
Naprawdę szukam gwarantowanego sposobu, aby upewnić się, że nie podzielę się swoimi prywatnymi osobami ze światem (z wyjątkiem Snapchata), który będzie działał płynnie poprzez programowanie, debugowanie i wdrażanie, a także będzie niezawodny. To jest całkowicie nierealne. Co więc realistycznie mogę zrobić?
Szczegóły techniczne: VS2012, C # 4.5, kontrola źródła będzie usługą TF lub GitHub. Obecnie używamy częściowej klasy do podziału wrażliwych kluczy w osobnym pliku .cs, który nie zostanie dodany do kontroli źródła. Myślę, że GitHub może mieć tę zaletę, że .gitignore może być użyty do zapewnienia, że plik klasy częściowej nie jest rejestrowany, ale wcześniej to spieprzyłem. Mam nadzieję na „och, wspólny problem, oto jak to robisz”, ale być może będę musiał zadowolić się tym, „że nie jest do bani tak bardzo, jak mogłoby to mieć”,: /