2009-12-31 52 views
41

Đối với một dự án thú cưng, tôi phát triển một ứng dụng dành cho máy tính để bàn yêu cầu các khóa API từ một số dịch vụ web khác nhau.Cách mở nguồn ứng dụng sử dụng các khóa API

Tôi đã trải qua và chuẩn bị ứng dụng này để trở thành nguồn mở và chạy qua vấn đề phải làm gì với các khóa đó.

Vấn đề là: sự hiểu biết của tôi là các khóa API này sẽ không hiển thị cho bất kỳ ai sử dụng ứng dụng hoặc xem/sửa đổi mã nguồn. Từ cuối webservice, các khóa API này được sử dụng để xác định các ứng dụng truy cập API của chúng và cho phép/chặn sử dụng khi thích hợp. Trong hầu hết TOS để nhận các khóa này, nó thực sự được tuyên bố rõ ràng rằng các khóa không được chia sẻ với thế giới.

Hiện nay tất cả các chìa khóa của tôi được mã hóa, nhưng tại tôi đang ở một bế tắc như thế nào để xử lý tình hình các phím riêng trong một ứng dụng mã nguồn mở:

-Nếu các phím vẫn hardcoded, họ sẽ hiển thị công khai ngay khi mã nguồn của tôi.

-Tôi thực sự không thể bỏ qua tệp nguồn với các khóa từ phân phối mã, kể từ đó nó sẽ không biên dịch. Điều này giải quyết vấn đề về mặt kỹ thuật, nhưng giới thiệu một vấn đề mới, không được chấp nhận .

-Nếu tôi đẩy các phím vào tệp .ini hoặc tệp cấu hình khác và chỉ cần không bao gồm tệp đó trong kho lưu trữ mã công khai của tôi, nó vẫn phải được phân phối cùng với nhị phân của ứng dụng của tôi ứng dụng hoạt động, vì vậy các phím của tôi sẽ hiển thị trong phân phối ứng dụng thay vì phân phối nguồn. Không phải là một cải tiến. Bất kỳ thể dục dụng cụ mã hóa nào mà tôi đã cố gắng sử dụng trên tệp INI này sẽ thêm sự phức tạp cho bất kỳ ai cố gắng sửa đổi mã của tôi.

Vì vậy, liên quan đến codebase của tôi (hiện đang trong Mercurial để kiểm soát phiên bản), cách tốt nhất để quản lý mọi thứ để mã có thể là công khai, nhưng khóa của tôi vẫn ở chế độ riêng tư?

+0

Bạn đang sử dụng ngôn ngữ lập trình nào? –

+0

Trong trường hợp này tôi đang sử dụng C# – callingshotgun

Trả lời

15

Không biết bạn đang sử dụng ngôn ngữ nào, nhưng ví dụ trong C/C++ bạn thêm tệp bao gồm với khóa API và sau đó để nó ra khỏi điều khiển nguồn, thay vào đó hãy thêm tệp không có thật với một cách rõ ràng giả mạo khóa API. Hầu hết các ngôn ngữ đều có một hoặc một cách khác để bao gồm các tệp.

8

Ứng dụng của bạn nên sử dụng tệp cấu hình. Tệp cấu hình này được tải vào thời gian chạy và không ảnh hưởng đến việc biên dịch. Cho phép người dùng tải xuống một tệp nhị phân và vẫn sử dụng khóa api của riêng họ.

Như Kornel nói, bạn có thể bao gồm tệp cấu hình mẫu bằng Khóa API giả, trong điều khiển nguồn của bạn.

Một tùy chọn khác, bạn có thể nói chuyện với những người đang chạy các dịch vụ web và yêu cầu một trong hai điều.

  1. Khóa tạm thời, chỉ hoạt động với chức năng giới hạn. Điều đó sẽ cho phép người dùng thấy chức năng cơ bản của ứng dụng của bạn, nhưng một số người sẽ không bao giờ cập nhật khóa và chỉ sử dụng nội dung cơ bản.

  2. Nói chuyện với các dịch vụ web để xem bạn có cung cấp cho bạn Khóa API đặc biệt cho ứng dụng của bạn hay không. Phiên bản nguồn mở sẽ yêu cầu người dùng nhập riêng của họ. Nhưng nhị phân của bạn có thể sử dụng một tiêu chuẩn.

Ý tưởng sử dụng cấu hình cho khóa api, không phải là mới hoặc chưa từng nghe thấy. Bit.ly dịch vụ làm điều đó. Và tất cả các ứng dụng mã nguồn mở mà tôi thấy cung cấp cho Bit.ly yêu cầu tên người dùng và khóa api của bạn trước khi bạn có thể sử dụng nó.

Điều này không khác gì?

+0

Sự cố khi sử dụng tệp cấu hình là tôi thực sự phân phối chương trình ở dạng được biên dịch, có thể sử dụng ở nơi khác. Nếu tôi đã đi tuyến đường cấu hình tập tin, tôi sẽ phải phân phối chương trình với một tập tin cấu hình đầy với các phím API. – callingshotgun

+6

Thành thật mà nói, không có gì ngăn chặn một hacker hiểu biết để trích xuất các khóa API của bạn ngay cả từ các hình thức biên dịch. –

+0

Chúng ta đang nói về hệ điều hành nào? Tất cả các hệ thống hiện đại đều có một hệ thống cài đặt và tất cả chúng đều xử lý các tập tin cấu hình theo cách này hay cách khác. Bạn không phải gửi nó với các khóa API khả thi. Tôi đã nhìn thấy một số dự án sẽ không chạy cho đến khi khóa là một khóa hợp lệ. Ứng dụng chỉ kiểm tra xem khóa có hoạt động khi khởi động hay không. Nếu bạn muốn gửi một phiên bản demo của một số loại, bạn có thể cố gắng cung cấp một phiên bản tạm thời. Tôi đã cập nhật câu trả lời của mình với suy nghĩ này –

Các vấn đề liên quan