Я успешно использую Google Classroom API в браузере, чтобы действовать от имени пользователя, которому предоставлены разрешения для этого через OAuth2 с помощью клиентской библиотеки Google.Я пытаюсь понять, как доверять результатам API, отправленным на мой сервер из браузера.Вот история, объясняющая сквозную проблему, которую я пытаюсь решить.
- Пользователь X входит на мой веб-сайт с помощью Google Login, и я сохраняю объект Google Login этого пользователя (который передаетсяна мой сервер в виде id_token и декодируется для обеспечения подлинности, как подробно описано здесь ) в моей базе данных.Этот ответ в итоге выглядит примерно так: сильно отредактированный объект:
{
"iss": "accounts.google.com",
"azp": "redacted-string",
"aud": "redacted-string",
"sub": "redacted-string",
"hd": "redacted-string",
"email": "redacted-string",
"email_verified": true,
"at_hash": "redacted-string",
"name": "redacted-string",
"picture": "redacted-string",
"given_name": "redacted-string",
"family_name": "redacted-string",
"locale": "en",
"iat": redacted-number,
"exp": redacted-number,
"jti": "redacted-string"
}
Я хочу сделать что-то в Google Classroom от имени пользователя, например, список классных комнат.Поэтому я прошу разрешения сделать это, отправив их через соответствующий рабочий процесс OAuth2, который предоставляет Google.Затем, получив согласие, я делаю требуемый вызов Google Classrooms API, чтобы составить список классов, и получаю обратно список классов, примерно так:
{
"courses": [
{
"id": "redacted-number",
"name": "redacted-string",
"ownerId": "redacted-number",
"creationTime": "2019-01-09T19:04:28.084Z",
"updateTime": "2019-01-09T19:04:56.828Z",
"enrollmentCode": "redacted-string",
"courseState": "DECLINED",
"alternateLink": "https://classroom.google.com/c/redacted-string",
"teacherGroupEmail": "redacted-string",
"courseGroupEmail": "redacted-string",
"teacherFolder": {
"id": "redacted-string"
},
"guardiansEnabled": false
},
{
"id": "redacted-number",
"name": "redacted-string",
"ownerId": "redacted-number",
"creationTime": "2019-01-09T19:03:06.321Z",
"updateTime": "2019-01-09T19:03:05.328Z",
"enrollmentCode": "redacted-string",
"courseState": "PROVISIONED",
"alternateLink": "https://classroom.google.com/c/redacted-string",
"teacherGroupEmail": "redacted-string",
"courseGroupEmail": "redacted-string",
"teacherFolder": {
"id": "redacted-string"
},
"guardiansEnabled": false
}
]
}
Теперь я хотел бы передать эту информацию на мой сервер и сохранить ее в базе данных, связанной с пользователем.Я уже использую JWT для аутентификации
пользователя , поэтому, когда запрос достигает моего сервера, я знаю, какой пользователь его отправил.То, что я
не знаю, так это то, как доверять объекту Google Classroom, который они мне посылают, на самом деле пришел от Google.не беспокоиться о том, что пользователь распространяет поддельные данные объекта Google в мою базу данных?Я бы подумал, что объекты каким-то образом были подписаны, чтобы мой сервер мог проверить подлинность объектов Google с учетом учетных данных моего приложения и проверенного объекта входа Google в прокси-сервер.Я думаю, что этот процесс будет похож на то, как Google Login позволяет мне проверять подлинность входа на моем сервере.
Если есть ясный способ сделать это, я этого не вижу.Может ли кто-нибудь помочь мне сосредоточиться?
PS Это продолжение этого вопроса , который, к сожалению, так и не получил достойного ответа.