Получение 401 несанкционированных в облачном режиме при использовании аутентификации конечного пользователя - PullRequest
1 голос
/ 13 февраля 2020

Следуя руководству по аутентификации для Cloud Run здесь , я хотел сделать сервис доступным только для аутентифицированных пользователей.

Я создал базовый сервис, который называется helloworld (да, здесь нет оригинальности) ) и применил следующую политику:

gcloud run services add-iam-policy-binding helloworld \
    --member="allAuthenticatedUsers" \
    --role="roles/run.invoker"

Затем я попытался вызвать ее с помощью gcloud auth print-identity-token идентификатора идентификатора, например:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://helloworld-*****.a.run.app

Все хорошо, служба отвечает с однонаправленным каналом токены, приходящие из учетной записи @ gmail.com и учетной записи GSuite с использованием gcloud.

В качестве следующего шага я следовал руководству по аутентификации конечного пользователя здесь и:

  • создал учетные данные веб-приложения в том же проекте, что и служба Cloud Run выше
  • , повторно развернул службу для поглощения новой конфигурации идентификатора клиента
  • создал простую страницу HTML с этим Идентификатор клиента и логин входа в систему Google c (например, этот )
  • запустили локальный веб-сервер для обслуживания этой страницы и получили новый идентификатор токена
  • попытался сделать то же самое curl с этим самый токен

На этот раз ответом был 401 со следующим значением в заголовке WWW-Authenticate:

Bearer error="invalid_token" error_description="The access token could not be verified"

Это ответ https://oauth2.googleapis.com/tokeninfo API:

{
  "iss": "accounts.google.com",
  "azp": "*****************.apps.googleusercontent.com",
  "aud": "*****************.apps.googleusercontent.com",
  "sub": "*******",
  "email": "theuser@gmail.com",
  "email_verified": "true",
  "at_hash": "********",
  "name": "********",
  "picture": "********",
  "given_name": "********",
  "family_name": "********",
  "locale": "en",
  "iat": "1581617530",
  "exp": "1581621130",
  "jti": "6a0dd7561c0d95f7c92fc29a885039fe3f23db16",
  "alg": "RS256",
  "kid": "d8efea1f66e87bb36c2ea09d837338bdd810353b",
  "typ": "JWT"
}

и значения azp и aud - это тот же идентификатор клиента, который определен как учетные данные веб-приложения в проекте.

I также пытался добавить специфицированного c пользователя к сервису так:

gcloud run services add-iam-policy-binding helloworld \
    --member="user:theuser@gmail.com" \
    --role="roles/run.invoker"

Все еще не повезло ... Что я делаю не так?

1 Ответ

0 голосов
/ 15 февраля 2020

Благодаря вкладу wlhee об этой проблеме я повторно развернул службу и смог успешно получить к ней доступ с помощью токена, сгенерированного с использованием идентификатора клиента из того же проекта.

...