Приложение Engine Remote_api с OpenID -- google-app-engine поле с участием openid пол Связанный проблема

App Engine remote_api with OpenID


10
vote

проблема

русский

Я недавно попытался переключить приложение My App Engine для использования OpenID, но у меня есть проблема, аутентифицирующаяся с Remote_api. Старый механизм аутентификации для Remote_api, похоже, не работает (что имеет смысл) - я получаю «urllib2.httperror: http-ошибка 302: найден», что я предполагаю, это перенаправляет AppEngine, перенаправляя меня к странице входа в OpenID настроить.

Я думаю, я скучаю с чем-то довольно очевидным. В настоящее время мой скрипт Remote_api имеет следующее в нем -

 <код> remote_api_stub.ConfigureRemoteDatastore(app_id=app_id, path='/remote_api', auth_func=auth_func, servername=host, secure=secure)   

Где auth_func составляет

 <код> def auth_func():   return raw_input('Username:'), getpass.getpass('Password:')   

Любые идеи Что мне нужно для удаления для удаленного_api? Я предполагаю, что подобные проблемы будут встречаться с Bulkloader тоже. Ура,

Колин

Английский оригинал

I've recently tried to switch my app engine app to using openID, but I'm having an issue authenticating with remote_api. The old authentication mechanism for remote_api doesn't seem to work (which makes sense) - I'm getting a 'urllib2.HTTPError: HTTP Error 302: Found', which I assume is appengine redirecting me to the openid login page I've set up.

I guess I'm missing something fairly obvious. Currently my remote_api script has the following in it -

remote_api_stub.ConfigureRemoteDatastore(app_id=app_id, path='/remote_api', auth_func=auth_func, servername=host, secure=secure) 

where auth_func is

def auth_func():   return raw_input('Username:'), getpass.getpass('Password:') 

Any ideas what I need to supply to remote_api? I guess similar issues would be encountered with bulkloader too. Cheers,

Colin

</div
     

Список ответов

9
 
vote
vote
Лучший ответ
 

Это была веселая.

Глядя на Remote_api, поток для аутентификации, кажется, что-то подобное:

    .
  • Подскажите пользователь для учетных данных Google
  • Опубликуйте учетные данные на https://www.google.com/accounts/ClientLogin < / li>
  • Разбор <код> auth токен из тела ответа
  • Передайте токен https://myapp.appspot.com/__login / li>
  • grab <код> ACSID cookie набор в ответе
  • Передайте <код> ACSID cookie в последующих запросах, которые требуют авторизации

Я не смог найти много документации по новой поддержке OpenID, хотя Запись в блоге Ника была информативной.

Вот тестовое приложение, которое я написал, чтобы увидеть, как все работает:

app.yaml:

 <код> handlers: - url: /remote_api   script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py   login: admin - url: /.*   script: test.py   

test.py:

 <код> class MainPage(webapp.RequestHandler):   def get(self):     user = users.get_current_user()     if user:       self.response.out.write("Hi, %s!<hr>admin is %s" % (user.user_id(),         users.is_current_user_admin()))     else:       self.redirect(users.create_login_url('/', None,         'https://www.google.com/accounts/o8/id'))   

Переверните мой режим авторизации между учетными записями Google и Federated Login, я заметил несколько вещей:

    .
  • Пользователи администратора правильно распознаются IS_Current_user_admin () с OpenID
  • Режимы смешивания не работают. С помощью аутентификации, установленные на учетные записи Google, вызывая create_login_url с помощью Federated_identity бросает auteloodedError
  • <код> ACSID cookie по-прежнему произведено в конце процесса входа в систему, только он исходит от / _ah / openid_verify вместо / _ah / login

Так что происходит с Remote_api при использовании Federated Login? Если мы используем по умолчанию appengine_rpc.httprpcserver, он покорно следит за тем же процессом аутентификации счета Google, описанный в верхней части, только приложение больше не рассматривает <код> ACSID Cookie, возвращаемый / _ah / login, чтобы быть действительным Так как с тех пор, как вы все еще не связаны, вы получаете 302 Redirect на страницу входа в OpenID, / _ah / login_required.

Я не знаю, что здесь правильное решение. Похоже, это потребует обновления API. Может быть, ник или один из других гуеговчиков может весить.

На данный момент, вот взлом обходной путь:

    .
  • включить Федеративное вход для вашего приложения
  • Убедитесь, что вы передаете save_cookies = true при вызове Remote_api_stub.configuremotedatastore для вашего консоли скрипта
  • попытка аутентификации консоли и получите ошибку 302
  • Войти как администратор через веб-интерфейс вашего приложения
  • В вашем браузере файлы cookie найдите файл cookie acsid для myapp.appspot.com
  • Найти и отредактируйте свой локальный файл ~ / .appcfg_cookies
  • Замените файл cookie acsid для myapp.appspot.com с одним из браузера

В следующий раз, когда вы пытаетесь использовать Remote_api, он должен работать без запроса для учетных данных. Вам придется повторить последние 4 шаги каждый раз, когда Cookie истекает, хотя. Вы можете поднять истечение срока действия от 1 дня до 2 недель в консоли администратора, чтобы минимизировать раздражение. Веселиться!

 

This was a fun one.

Looking at remote_api, the flow for authentication seems to be something like this:

  • Prompt the user for Google credentials
  • Post the credentials to https://www.google.com/accounts/ClientLogin
  • Parse the auth token out of the response body
  • Pass the token to https://myapp.appspot.com/_ah/login
  • Grab ACSID cookie set in the response
  • Pass the ACSID cookie in subsequent requests that require authorization

I couldn't find a lot of documentation on the new OpenID support, though Nick's blog entry was informative.

Here's the test app I wrote to see how things work:

app.yaml:

handlers: - url: /remote_api   script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py   login: admin - url: /.*   script: test.py 

test.py:

class MainPage(webapp.RequestHandler):   def get(self):     user = users.get_current_user()     if user:       self.response.out.write("Hi, %s!<hr>admin is %s" % (user.user_id(),         users.is_current_user_admin()))     else:       self.redirect(users.create_login_url('/', None,         'https://www.google.com/accounts/o8/id')) 

Flipping my auth mode between Google Accounts and Federated Login, I noticed a few things:

  • Admin users are correctly recognized by is_current_user_admin() with OpenID
  • Mixing modes doesn't work. With authentication set to Google Accounts, calling create_login_url with a federated_identity throws a NotAllowedError
  • An ACSID cookie is still produced at the end of the login process, only it comes from /_ah/openid_verify instead of /_ah/login

So what's happening with remote_api when using Federated Login? If we're using the default appengine_rpc.HttpRpcServer, it's dutifully following the same Google Account authentication process described at the top, only the app no longer considers the ACSID cookie returned by /_ah/login to be valid, so since you're still unauthenticated, you get a 302 redirect to the OpenID login page, /_ah/login_required.

I dunno what the right solution is here. Seems like it would require an API update. Maybe Nick or one of the other Googlers can weigh in.

For now, here's a hacky workaround:

  • Turn on Federated Login for your app
  • Make sure you're passing save_cookies=True when calling remote_api_stub.ConfigureRemoteDatastore for your console script
  • Attempt console authentication and get the 302 error
  • Login as an admin via your app's web interface
  • In your browser cookies, find the ACSID cookie for myapp.appspot.com
  • Find and edit your local ~/.appcfg_cookies file
  • Replace the ACSID cookie for myapp.appspot.com with the one from your browser

The next time you try to use remote_api, it should work without prompting for credentials. You'll have to repeat the last 4 steps every time the cookie expires, though. You can bump the expiration from 1 day to as high as 2 weeks in the admin console to minimize the annoyance. Have fun!

</div
 
 
     
     
3
 
vote

Это, безусловно, проблема ... Отметьте свой интерес к Google Google, чтобы исправить это, выбрав билет на http://code.google.com/p/googleapenge/issues/detail?id=3258 и не стесняйтесь добавлять все ваши обходные пути там.

В соответствующем примечании мы также признаем, что документы несколько редкие, поэтому я работаю над статьей, который, надеюсь, заполняет - в некоторых из этих отверстий ... оставайся настроенными и держать глаза открытыми на http://code.google.com/appengine/Aticles

 

This is definitely an issue... mark your interest in getting Google to fix this by starring the ticket at http://code.google.com/p/googleappengine/issues/detail?id=3258 and feel free to add any of your workarounds there.

On a related note, we also recognize that the docs are somewhat sparse, so I'm working on an article which hopefully fills-in some of those holes... stay tuned and keep your eyes open at http://code.google.com/appengine/articles

</div
 
 
2
 
vote

Вот Обходной путь Вы можете использовать До того, пока на месте есть более постоянное решение.

 

Here's a workaround you can use until there's a more permanent solution in place.

</div
 
 
 
 

Связанный проблема

1  API Google Drive не загружает файл  ( Google drive api does not upload a file ) 
Я создал API-акцент и использовал следующий код, когда я запускаю это в веб-браузере, он просит меня авторизовать приложение, которое я делаю, а затем файл со...

3  Ничего не происходит при звонке конечной точки Google из приложения Android с учетными данными  ( Nothing happens when calling google endpoint from android app with credential ) 
Я сталкиваюсь с проблемами при вызове конечной точки Google из Android-приложения только с учетными данными. Мой API Google защищен от AUTH (CLINGIDS, AUDIENC...

2  Google App Engine Self.redirect Post  ( Google app engine self redirect post ) 
У меня есть форма, которая сообщает информацию одной из моих обработчиков. Мой обработчик проверяет информацию, а затем должен опубликовать эту информацию тре...

3  Инициализация Admin Firebase в App Engine Standard Java  ( Initializing firebase admin in app engine standard java ) 
Я пытаюсь использовать Firebase Auth в стандарт App Standard Java для проверки токенов с Android. Однако, когда я пытаюсь инициализировать администратор Fir...

4  Является ли эта ошибка Google Endpoints на сервере или клиенте?  ( Is this google endpoints error on the server or client ) 
<Р> Я изучаю Google Endpoints из учебника по адресу https: // разработчикам .google.com / AppEngine / документы / Java / оконечных / . Я получил Конточку успе...

2  Задача приложений двигателя не извлекается на ошибку  ( App engine task not being retried on error ) 
На моей локальной среде Dev Dev, когда задача приложений, которая была добавлена ​​к очереди задач, попадает в ошибку, она повторяется до успеха. Однако в про...

0  WhiteListed для PHP в GAE  ( Whitelisted for php in gae ) 
Я полностью новичок в GAE. Я стремлюсь построить WebApp в Google Cloud SQL и GAE, используя PHP для записи в / из базы данных. Я получил его на местном режиме...

0  Как запустить юниты на месте, используя службу хранения Google Cloud  ( How to run junits locally using google cloud storage service ) 
Я использую Google Cloud Storage (GCS) в моем приложении GAE. Для этого я написал несколько юнитов для проверки функциональности, которая зависит от GCS. Как ...

0  Добавление Self.Response.Headers [«Доступ-контроль-разрешение»] = '*' ничего не делает. webapp2  ( Adding the self response headersaccess control allow origin does not d ) 
Это моя главная страница: <Код> class Home(webapp2.RequestHandler): def get(self): self.response.headers.add_header('Access-Control-Allow-Origi...

3  Ошибки компиляции на датасторе импорта  ( Compile errors on datastore import ) 
<Р> Я дурачиться с приложением двигателем Google с помощью GWT, и столкнулся с ошибками при установке моих взаимодействий с датастором. <код> [error] The imp...

1  Уменьшите часы экземпляра CloudsQL (WordPress)  ( Reduce cloudsql instance hours wordpress ) 
У меня есть установка WordPress на GAE. Это веб-сайт, который будет очень редко обновлен, и будет иметь мало посетителей каждый день (100 ish max). Я хотел бы...

0  Ошибки AppEngine URI в приборной панели администратора  ( Appengine uri errors in admin dashboard ) 
Я загрузил новую версию App End-app Google и включить загруженную версию приложения в качестве версии по умолчанию. Я использую Java. Я выяснил в консоли адми...

9  Бег мезонина на приложении  ( Running mezzanine on app engine ) 
Я ищу решение для блога для запуска внутри проекта Django, развернутого на приложении Google App. После небольшого обзора я решил попробовать мезонина v0.11.3...

2  Google Maps Fusion Table CoStabilio  ( Google maps fusion tables feasibility ) 
Мне интересно, сможет ли кто-то представить о подходе для Google Maps. В настоящее время я разрабатываю визуализацию с помощью Google Maps API V3. Эта визуали...

0  Google App Двигатель пользовательских домена SSL с модулями  ( Google app engine custom domain ssl with modules ) 
У меня есть несколько модулей для моего приложения приложения Google App. В разделе «Настройки приложений» из консоли разработчиков я добавил пользовательские...




© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.