2017-01-26 13 views
3

Google App Engine에 2 개의 모듈 (AB)으로 구성된 애플리케이션이 있습니다. A은 사용자 요청을 처리하며 인증없이 사용할 수 있습니다. BA이 필요할 때 특정 작업을 수행하는 마이크로 서비스입니다. 그래서 우리는 urlfetch 사용 B-A 제작 요청이 :내부 App Engine 모듈에서 요청을 인증하는 방법은 무엇입니까?

from google.appengine.api import urlfetch 
from google.appengine.api import app_identity 
rpc = urlfetch.create_rpc() 
urlfetch.make_fetch_call(
    rpc, 
    "https://b-dot-my-project.appspot.com/some/url", 
    method='GET', 
    follow_redirects=False, 
    headers = { 
     'X-Appengine-Inbound-Appid': 'my-project', 
    }, 
) 
response = rpc.get_result() 

Bapp.yaml이 같은 보이는 다음 docs에서

runtime: python27 
api_version: 1 
threadsafe: yes 
service: b 

handlers: 
- url: /.* 
    script: my_module.app 
    login: admin 
    auth_fail_action: unauthorized 

을, 그들이 제안 :

가 요청을 발행하는 경우 다른 App Engine 앱에 App Engine 앱 은 그 신원을 표명해야합니다 y 헤더에 X-Appengine-Inbound-Appid를 요청에 추가합니다. 리디렉션을 따르지 않는 서비스를 가져 오면 App Engine은이 헤더 을 요청에 자동으로 추가합니다.

내가 무엇을 하든지,이 요청을 할 때 나는 계속 401을 얻습니다. AB은 같은 프로젝트에 배포됩니다. B의 로그에 요청 헤더와 실패가 포함되어 있지 않으므로 을 설정하고 수동으로 헤더를 추가하려고 시도했지만 (here으로 설명 된 이유로 작동하지 않을 것으로 예상 했음에도 불구하고) 헤더가 설정되어 있는지 확실하지 않습니다. 조건은 내 처리기 모듈이 실행되기 전에 발생합니다.

나는 오히려가 디버깅을 위해 프로젝트 관리자 계정에서 B을 (를 호출 할 수 좋네요으로, B에 인증보다는 단지 헤더 옵션 login: admin을 삭제하고 의존 A에 의존하는 가능한 것 예).

+0

동일한 앱 내의 개별 모듈은 "... 다른 App Engine 앱, ..."이 아닙니다. 헤더 수정없이 앱 내 urlfetch를 수행 할 수 있습니다. – GAEfan

+0

그리고'service : b' 대신'module : b'가되어서는 안 될까요? 이 시나리오에서 https://cloud.google.com/appengine/docs/python/modules/converting – GAEfan

+2

FWIW는 모듈 A에서 작업을 생성하고 urlfetch를 사용하는 대신 모듈 B가 처리하는 대기열에 푸시합니다. –

답변

-1

login:admin 대신 'HTTP_USER_AGENT': 'AppEngine-Google; (+http://code.google.com/appengine; appid: s~my-project)' 모듈 B 요청의 헤더를 확인할 수 있습니다. 그건 urlfetch, taskqueue, 또는 cron job에서 온 것입니다.

+0

제 3자가 User-Agent 헤더를 위조 할 수 있음을 확실히 알고 싶다면'X-Appengine-Inbound-Appid'를 사용해야합니다. 대신 https://cloud.google.com/appengine/docs/python/outbound-requests#request_headers 플러스 질문에 명시된 바와 같이'login : admin'을 삭제하면 B가 직접 요청을하지 못하게됩니다. , 오히려 유지하려는 기능 – Xocoatzin

+0

제 3 자도 'X-Appengine-Inbound-Appid'헤더를 위조 할 수 있습니다. – GAEfan

+0

글쎄, 헤더는 App Engine에서 설정 한 것으로 변경할 수 없습니다. 설명서 [https://cloud.google.com/appengine/docs/python/appidentity/#asserting_identity_to_other_app_engine_apps]에 명시되어 있습니다. [here] (https://cloud.google.com/appengine/docs/python/outbound-requests#request_headers) – Xocoatzin