То, что я хотел бы сделать, - ограничить доступ к моим конечным точкам обслуживания только для веб-приложения, развернутого в Google App Engine, поэтому доступ возможен только из some-app-id.appspot.com и домен, сопоставленный с ним, mymappeddomain.com. Я также не хочу, чтобы пользователь входил в систему, чтобы API-интерфейсы работали. Поэтому, в основном, я хочу, чтобы API был доступен только для кода JavaScript, размещенного в том же приложении приложения Google App Engine, без входа в систему для использования этой службы. В идеале мой API не доступен для просмотра в API-интерфейсе API.Ограничить доступ к конечным точкам Google App Engine
Я изучил это немного и нашел несколько статей (sample code, walk through), но не успел их применить. Кроме того, похоже, что все решения по-прежнему требуют от пользователя входа в систему. Я создал идентификатор клиента веб-приложения, используя консоль Google Developer.
Конечная точка написана на Go и развернута в Google App Engine. Это похоже на это:
package my
import (... "github.com/GoogleCloudPlatform/go-endpoints/endpoints" ...)
func (ms *MyService) ListData(c endpoints.Context, r *MyRequest) (*MyResponse, error) {
_, err := endpoints.CurrentBearerTokenUser(c,
[]string{ endpoints.EmailScope },
[]string{ "some-long-id-matching-what-is-used-in-javascript.apps.googleusercontent.com" })
if err != nil {
log.Printf("auth failed")
return nil, err
}
...
Мой JavaScript выглядит следующим образом:
var app = angular.module('myApp', ['ngRoute', 'angular-google-gapi']);
app.run(['$window', 'GAuth', 'GApi', function ($window, GAuth, GApi) {
var CLIENT = 'some-long-id-matching-what-is-used-in-go.apps.googleusercontent.com';
var BASE;
if($window.location.hostname === 'localhost') {
BASE = '//localhost:8080/_ah/api';
} else {
BASE = 'https://my-app-id.appspot.com/_ah/api';
}
GApi.load('myservice', 'v1', BASE);
GAuth.setClient(CLIENT);
GAuth.setScopes('https://www.googleapis.com/auth/userinfo.email');
GAuth.checkAuth().then(function() {
console.log('authenticated');
}, function() {
console.log('authentication issue');
});
}]);
Когда я запускаю это приложение в браузере, я вижу следующие ошибки в консоли JavaScript:
angular-google-gapi.min.js:7 myservice v1 api loaded
https://content.googleapis.com/oauth2/v2/userinfo Failed to load resource: the server responded with a status of 401 (OK)
app.js:24 authentication issue
Мне бы понравились предложения о том, как сделать эту работу. Заранее спасибо.
Так что, если я называю 'GAuth.login()', это будет причиной конечного использования, чтобы иметь для входа в систему с помощью аккаунта Google? Я не хочу, чтобы пользователи входили в систему, я просто хочу ограничить доступ к моему API для моего домена или локального хоста ... например. Я не хочу, чтобы кто-то смотрел мой JS-код и мог вызвать мой API из другого приложения. – SimplicityGuy
Невозможно, чтобы в консоли google dev вы добавили все домены, которые могут получить доступ к вашему логину api. Если вы хотите уменьшить логин для некоторого пользователя, вы можете проверить, существует ли электронная почта пользователя в вашем списке пользователей в вашем db. –
«Пользователь» - это любой анонимный пользователь из сети, попавшей на мой сайт, однако мне нужно ограничение доступа к API, так как мой API хранит данные, которые вводит пользователь, и я не хочу, чтобы произвольные люди, использующие API, получали данные или строить поверх моего API. Я указал в моей консоли dev, что идентификатор клиента доступен только из mydomain.com и localhost. Так я все еще использую GAuth.login(), и если да, то какие учетные данные пользователя я использую? Я не хочу, чтобы пользователи вводили какие-либо учетные данные. – SimplicityGuy