Tôi đang làm việc trên một trang web cho phép người dùng đăng nhập bằng thông tin đăng nhập OAuth từ Twitter, Google, v.v. Để làm điều này, tôi phải đăng ký với các nhà cung cấp khác nhau này và nhận khóa API siêu bí mật mà tôi có để bảo vệ với các cam kết chống lại các bộ phận cơ thể khác nhau. Nếu khóa của tôi bị gank, phần đó sẽ bị giật.
Khóa API phải di chuyển với nguồn của tôi, vì nó được sử dụng trong thời gian chạy để thực hiện các yêu cầu xác thực. Trong trường hợp của tôi, khóa phải tồn tại trong ứng dụng trong tệp cấu hình hoặc trong chính mã. Đó không phải là vấn đề khi tôi xây dựng và xuất bản từ một máy duy nhất. Tuy nhiên, khi chúng ta ném kiểm soát nguồn vào hỗn hợp, mọi thứ trở nên phức tạp hơn.
Vì tôi là một thằng khốn rẻ tiền, tôi rất thích sử dụng các dịch vụ kiểm soát nguồn miễn phí như TFS trên đám mây hoặc GitHub. Điều này để lại cho tôi một câu hỏi hóc búa:
Làm cách nào tôi có thể giữ cho cơ thể của mình nguyên vẹn khi các khóa API nằm trong mã của tôi và mã của tôi có sẵn trong kho lưu trữ công cộng?
Tôi có thể nghĩ ra một số cách để xử lý việc này, nhưng không có cách nào thỏa mãn.
- Tôi có thể xóa tất cả thông tin cá nhân khỏi mã và chỉnh sửa lại sau khi triển khai. Đây sẽ là một nỗi đau nghiêm trọng để thực hiện (tôi sẽ không nêu chi tiết theo nhiều cách) và không phải là một lựa chọn.
- Tôi có thể mã hóa nó. Nhưng khi tôi phải giải mã nó, bất kỳ ai có nguồn đều có thể tìm ra cách để làm như vậy. Vô nghĩa.
- Tôi có thể trả tiền cho kiểm soát nguồn tư nhân. LOL j / k tiêu tiền? Xin vui lòng.
- Tôi có thể sử dụng các tính năng ngôn ngữ để tách biệt thông tin nhạy cảm với phần còn lại của nguồn và do đó giữ nó khỏi kiểm soát nguồn. Đây là những gì tôi đang làm bây giờ, nhưng nó có thể dễ dàng bị làm hỏng bằng cách kiểm tra nhầm trong tệp bí mật.
Tôi thực sự đang tìm kiếm một cách bảo đảm để đảm bảo rằng tôi không chia sẻ thông tin cá nhân của mình với thế giới (ngoại trừ snapchat) sẽ hoạt động trơn tru thông qua phát triển, gỡ lỗi và triển khai và cũng có thể dễ dàng thực hiện. Điều này là hoàn toàn không thực tế. Vậy thực tế tôi có thể làm gì?
Chi tiết kỹ thuật: VS2012, C # 4.5, kiểm soát nguồn sẽ là dịch vụ TF hoặc GitHub. Hiện đang sử dụng một lớp một phần để tách các khóa nhạy cảm trong một tệp .cs riêng biệt sẽ không được thêm vào kiểm soát nguồn. Tôi nghĩ GitHub có thể có lợi thế vì .gitignore có thể được sử dụng để đảm bảo rằng tệp lớp một phần không được kiểm tra, nhưng tôi đã làm hỏng nó trước đó. Hy vọng cho một "ồ, vấn đề chung, đây là cách bạn làm điều đó" nhưng tôi có thể phải giải quyết cho "điều đó không hút nhiều như nó có thể có" ,: /