Tài liệu chỉ dành cho khách hàng. Những gì tôi cần là tài liệu về cách cung cấp chức năng Tài khoản dịch vụ ở phía máy chủ.
Điều này có thể có nghĩa là một vài điều khác nhau, nhưng tôi muốn giải quyết những gì tôi nghĩ câu hỏi đang đặt ra. Nếu bạn chỉ muốn tài khoản dịch vụ truy cập dịch vụ của mình, thì bạn chỉ có thể thêm clientId của tài khoản dịch vụ vào các chú thích @ Api/@ ApiMethod, tạo GoogleCredential và gọi dịch vụ của bạn như bình thường. Cụ thể ...
Trong bảng điều khiển dành cho nhà phát triển của Google, hãy tạo tài khoản dịch vụ mới. Thao tác này sẽ tạo tệp .p12 được tải xuống tự động. Điều này được khách hàng sử dụng trong tài liệu bạn đã liên kết đến. Nếu bạn không thể giữ an toàn .p12, thì điều này không an toàn hơn nhiều so với mật khẩu. Tôi đoán đó là lý do tại sao điều này không được trình bày rõ ràng trong tài liệu về Thiết bị đầu cuối đám mây.
Bạn thêm ID KHÁCH HÀNG hiển thị trong giao diện điều khiển các nhà phát triển của Google để các clientIds trong @Api hoặc chú thích @ApiMethod
import com.google.appengine.api.users.User
@ApiMethod(name = "doIt", scopes = { Constants.EMAIL_SCOPE },
clientIds = { "12345678901-12acg1ez8lf51spfl06lznd1dsasdfj.apps.googleusercontent.com" })
public void doIt(User user){ //by convention, add User parameter to existing params
// if no client id is passed or the oauth2 token doesn't
// match your clientId then user will be null and the dev server
// will print a warning message like this:
// WARNING: getCurrentUser: clientId 1234654321.apps.googleusercontent.com not allowed
//..
}
Bạn xây dựng một khách hàng giống như cách bạn làm với phiên bản không có bảo đảm, sự khác biệt duy là bạn tạo một đối tượng GoogleCredential để chuyển tới MyService.Builder của dịch vụ của bạn.
HttpTransport httpTransport = new NetHttpTransport(); // or build AndroidHttpClient on Android however you wish
JsonFactory jsonFactory = new JacksonFactory();
// assuming you put the .p12 for your service acccount
// (from the developer's console) on the classpath;
// when you deploy you'll have to figure out where you are really
// going to put this and load it in the appropriate manner
URL url = getClass().class.getResource("/YOURAPP-b12345677654.p12");
File p12file = new File(url.toURI());
GoogleCredential.Builder credentialBuilder = new GoogleCredential.Builder();
credentialBuilder.setTransport(httpTransport);
credentialBuilder.setJsonFactory(jsonFactory);
//NOTE: use service account EMAIL (not client id)
credentialBuilder.setServiceAccountId("[email protected]serviceaccount.com"); credentialBuilder.setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/userinfo.email"));
credentialBuilder.setServiceAccountPrivateKeyFromP12File(p12file);
GoogleCredential credential = credentialBuilder.build();
Bây giờ gọi khách hàng được tạo ra theo cách tương tự bạn mong các phiên bản không có bảo đảm, trừ trường hợp những người xây dựng mất google chứng chỉ của chúng tôi từ trên cao như là đối số cuối cùng
MyService.Builder builder = new MyService.Builder(httpTransport, jsonFactory, credential);
builder.setApplicationName("APP NAME");
builder.setRootUrl("http://localhost:8080/_ah/api");
final MyService service = builder.build();
// invoke service same as unsecured version
Trên thực tế bạn đang nói về xác thực và ủy quyền . Làm thế nào bạn sẽ đề xuất bảo vệ một điểm cuối cho chỉ ứng dụng của bạn mà không có một số hình thức xác thực, (hoặc ứng dụng hoặc người dùng cuối). Điểm cuối chỉ là các dịch vụ web tuân theo api công khai cụ thể. –
Một ví dụ về cách làm việc này là Tài khoản dịch vụ: https://developers.google.com/accounts/docs/OAuth2ServiceAccount Tuy nhiên, đây chỉ là cho API của Google. Tài liệu chỉ dành cho khách hàng. Những gì tôi cần là tài liệu hướng dẫn về cách cung cấp chức năng Tài khoản dịch vụ ở phía máy chủ. – mixmasteralan
Một cách khác là sử dụng giá trị băm của riêng bạn giữa ứng dụng và điểm cuối của bạn http://stackoverflow.com/questions/2447470/recaptcha-on-iphone-app-using-sdk – Ton