Документацията е само за клиента. Това, от което се нуждая, е документация за това как да осигуря функционалност на акаунта на услугата от страната на сървъра.
Това може да означава няколко различни неща, но бих искал да обърна внимание на това, което според мен задава въпросът. Ако искате само вашият акаунт за услуга да има достъп до вашата услуга, тогава можете просто да добавите clientId на акаунта за услуга към вашите @Api/@ApiMethod анотации, да създадете GoogleCredential и да извикате услугата си, както обикновено. Конкретно...
В конзолата за разработчици на Google създайте нов акаунт за услуга. Това ще създаде .p12 файл, който се изтегля автоматично. Това се използва от клиента в документацията, към която сте се свързали. Ако не можете да защитите .p12, тогава това не е много по-сигурно от парола. Предполагам, че това е причината това да не е изрично посочено в документацията на Cloud Endpoints.
Добавяте ИД на КЛИЕНТ, показан в конзолата за разработчици на google, към клиентските идентификатори във вашата анотация @Api или @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
//..
}
Създавате клиент по същия начин, както бихте направили с незащитената версия, като единствената разлика е, че създавате обект на GoogleCredential, който да прехвърлите към MyService.Builder на вашата услуга.
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("12345678901-12acg1ez8lf51spfl06lznd1dsasdfj@developer.gserviceaccount.com"); credentialBuilder.setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/userinfo.email"));
credentialBuilder.setServiceAccountPrivateKeyFromP12File(p12file);
GoogleCredential credential = credentialBuilder.build();
Сега извикайте генерирания си клиент по същия начин, по който бихте направили незащитената версия, с изключение на това, че създателят взема нашите идентификационни данни на Google от по-горе като последен аргумент
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
person
Tom
schedule
01.11.2014