login do manipulador app.yaml: a opção admin não é eficaz no aplicativo GAE padrão python env?

Eu estava trabalhando em algumas verificações de segurança para meu aplicativo GAE env python padrão e fiquei surpreso ao ver que ologin: admin opção parece não ser eficaz.

Desejo proteger uma parte de um namespace de solicitação apenas para o aplicativo em si, não para solicitações externas. O aplicativo envia essas solicitações por meio de uma fila de tarefas push.

Esta é a respectiva configuração do manipulador, que eu verifiquei no StackDriver para ser o código real que tratou da solicitação específica em questão:

- url: /ci/ci_msg*  # external requests OK
  script: apartci.app
  secure: always

- url: /ci/.*       # internal requests only
  script: apartci.app
  secure: always
  login: admin

Este é o código do manipulador, hackeado para registrar um erro e verificar se a solicitação realmente atinge o código do aplicativo, também verificado no StackDriver como o código de manipulação real:

def post(self):
    logging.error('in post')
    self.handle_post()

Enviei a solicitação externa para o mesmo caminho exato em que somente as solicitações internas da fila de tarefas devem ser aceitas, usando o complemento Firefox HttpRequester. O corpo da solicitação falhou nas verificações adicionaisself.handle_post(), mas isso é irrelevante para esta pergunta.

A resposta que recebi no HttpRequester (também bastante irrelevante):

<html>
 <head>
  <title>203 Non-Authoritative Information</title>
 </head>
 <body>
  <h1>203 Non-Authoritative Information</h1>
  <br /><br />
 </body>
</html>

Eu verifiquei os logs do aplicativo no StackDriver. Para minha surpresa, encontrei ologging.error('in post') log de aplicativo do meu manipuladorpost() método anexado ao log de solicitação, indicando que a solicitação chegou ao meu aplicativo:

Para comparação - o log da mesma solicitação enviada pelo próprio aplicativo (coincidentemente, apenas ~ 1 segundo antes do externo e manipulado exatamente pela mesma instância - o que contribuiu para minha confusão):

Minha expectativa era que a solicitação externa não chegasse ao código do manipulador, de acordo com a linha de login emElemento manipuladores:

admin

Como comrequeridos, executaauth_fail_action se o usuário não estiver conectado. Além disso, se o usuário não for administrador do aplicativo, ele receberá uma mensagem de erro, independentemente daauth_fail_action configuração. Se o usuário for um administrador, o manipulador continuará.

Quando um manipulador de URL com umConecte-se configuração diferente deopcional corresponde a um URL, o manipulador primeiro verifica se o usuário fez login no aplicativo usando seuopção de autenticação. Caso contrário, por padrão, o usuário é redirecionado para a página de entrada. Você também pode usarauth_fail_action para configurar o aplicativo para simplesmente rejeitar solicitações de manipulador de usuários que não estão devidamente autenticados, em vez de redirecionar o usuário para a página de entrada.

Note oadmin a restrição de login também é atendida para solicitações internas para as quais o Google App Engine defineX-Appengine cabeçalhos especiais. Por exemplo,cron tarefas agendadas atendem àsadmin restrição, porque o App Engine define um cabeçalho HTTPX-AppEngine-Cron: true nos respectivos pedidos. No entanto, os pedidos seriamnão satisfazer orequeridos restrição de login, porque as tarefas agendadas cron não são executadas como qualquer usuário.

Então, minha pergunta é por que / como a solicitação externa conseguiu acessar o código do manipulador? Estou esquecendo de algo?

questionAnswers(1)

yourAnswerToTheQuestion