Следуя руководству по аутентификации для 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"
Все еще не повезло ... Что я делаю не так?