Google App Engine에 2 개의 모듈 (A
및 B
)으로 구성된 애플리케이션이 있습니다. A
은 사용자 요청을 처리하며 인증없이 사용할 수 있습니다. B
은 A
이 필요할 때 특정 작업을 수행하는 마이크로 서비스입니다. 그래서 우리는 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()
B
의 app.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
을 얻습니다. A
과 B
은 같은 프로젝트에 배포됩니다. B
의 로그에 요청 헤더와 실패가 포함되어 있지 않으므로 을 설정하고 수동으로 헤더를 추가하려고 시도했지만 (here으로 설명 된 이유로 작동하지 않을 것으로 예상 했음에도 불구하고) 헤더가 설정되어 있는지 확실하지 않습니다. 조건은 내 처리기 모듈이 실행되기 전에 발생합니다.
나는 오히려가 디버깅을 위해 프로젝트 관리자 계정에서 B
을 (를 호출 할 수 좋네요으로, B
에 인증보다는 단지 헤더 옵션 login: admin
을 삭제하고 의존 A
에 의존하는 가능한 것 예).
동일한 앱 내의 개별 모듈은 "... 다른 App Engine 앱, ..."이 아닙니다. 헤더 수정없이 앱 내 urlfetch를 수행 할 수 있습니다. – GAEfan
그리고'service : b' 대신'module : b'가되어서는 안 될까요? 이 시나리오에서 https://cloud.google.com/appengine/docs/python/modules/converting – GAEfan
FWIW는 모듈 A에서 작업을 생성하고 urlfetch를 사용하는 대신 모듈 B가 처리하는 대기열에 푸시합니다. –