2014-10-02 2 views
1

У меня есть различный RESTful Web Servicesin App Engine, которые обеспечены аутентификации учетной записи Google:Доступ аккаунт Google проверку подлинности веб-службы размещены на App Engine без браузера входа в системе

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Authentication required</web-resource-name> 
     <url-pattern>/api/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
</security-constraint> 

После попадания этих веб-служб с помощью браузера клиента, Я перенаправлен на экран входа в учетные записи Google, где я сначала аутентифицирую себя, прежде чем приступать к вызову REST.

Однако теперь мне нужно запустить эти веб-службы с помощью сценариев командной строки в рамках автоматического запуска IC. Поэтому я не хочу, чтобы каждый раз запрашивался вход в браузер. Предпочтительно, я хотел бы поместить имя пользователя и пароль Google в зашифрованный файл на IC-сервере и позволить ему вызвать веб-службы без какого-либо вмешательства человека. Насколько я могу судить, есть несколько вариантов:

  • вручную регистрируется через браузер, а затем сохраняет токен доступа, который будет использоваться в сценарии командной строки. Однако, когда истекает срок действия токена, у меня возникнут проблемы.
  • получить токен доступа через учетную запись службы учетных записей p12. Похоже, что это работает только для доступа к API Google, таких как BigQuery и Cloud Storage, а не к вашему собственному коду.
  • оберните мою веб-службу в удаленном API, с которым мне еще предстоит поэкспериментировать.

Основываясь на моем нынешнем понимании, кажется, что доступ к аутентифицированной пользовательской письменной веб-службе Google не доступен пользователю, не являющемуся человеком. Это верно?

+0

Этот вопрос очень похож на http: // stackoverflow.com/questions/5872974/google-app-engine-security-constraint-is-not-working Однако я открыт для использования учетных записей служб, а не только для имени пользователя и пароля – yunspace

ответ

0

Поскольку вы заинтересованы в интерактивном взаимодействии с веб-сервисами RESTful (без вмешательства человека), мы в основном говорим о securing a REST API.

Существует множество ресурсов по этому вопросу по всему Интернету, но суть его является:

вы должны использовать SSL и сеансы или OAuth для обеспечения безопасности конечных точек.

В зависимости от того, насколько вы находитесь в текущем проекте, вы можете рассмотреть возможность использования Cloud Endpoints, там у вас будет возможность использовать OAuth2 (и иметь защиту DDoS).

Надеюсь, это поможет.

0

мне удалось получить эту работу, в конце концов с помощью:

  1. Выключение web.xml безопасности-ограничение, так что API не перенаправляет на Google Войти.
  2. Изменение моего API, чтобы вместо этого использовать маркер Oauth2 в заголовке авторизации.
  3. Проверка маркера на основе образца кода здесь: https://github.com/googleplus/gplus-verifytoken-java

я не пошел с облаком Endpoints, но компоненты Джерси + Dropwizard вместо этого. Dropwizard построил в Oauth2Provider, который я просто реализовал класс Authenticator, и он работает.