我已成功使用浏览器中的Google Classroom API代表已通过使用Google客户端库通过OAuth2授予权限的用户执行操作。我试图弄清楚如何信任从浏览器发送到服务器的API结果。这是一个故事,用以解释我要解决的端到端问题。
{
"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"
}
{
"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
}
]
}
也许我想得太多了,我不应该担心用户将假Google对象数据传播到我的数据库中吗?我本以为以某种方式对对象进行了签名,以使我的服务器可以通过给定我的应用程序凭据和代理用户的经过验证的Google登录对象来验证Google对象的真实性。我认为该过程类似于Google Login允许我在服务器端验证登录真实性的方式。
如果有明确的方法可以做到这一点,我看不到。谁能帮我把重点放在眼前?
P。 S.遗憾的是,这是对this question的后续行动,遗憾的是从来没有一个好的答案。
答案 0 :(得分:2)
无法防止有效用户从用户客户端浏览器向您的服务器发布伪造数据。
一种选择是更新您的应用程序,以启用服务器端对Google API的访问。
此处提供有关如何执行此操作的文档: https://developers.google.com/identity/sign-in/android/offline-access
如果您可以从客户端请求访问访问令牌,则还可以执行以下请求模式:
1)客户端向您的应用程序服务器上的API端点发出以下HTTP请求
GET /api/list_courses HTTP/1.1
Host: yourapp.example.com
Content-length: 0
Authorization: Bearer googles_api_access_token_here
2)您的应用程序服务器上的/ api / list_courses端点向googles API服务器发出以下请求:
GET /v1/courses HTTP/1.1
Host: classroom.googleapis.com
Content-length: 0
Authorization: Bearer googles_api_access_token_here
3)来自(2)的响应被发送回您的应用服务器
4)您的应用程序服务器向客户发送课程列表。
答案 1 :(得分:1)
这个问题可能根本不是问题,就像你写的一样:
我不知道该如何信任他们发送给我的Google Classroom对象实际上来自Google。
假设API
通讯,他们甚至没有发送,但是您通过SSL
或TLS
来获取(主机的证书也可以是validated,而这是不需要,因为当它与A
中的DNS
记录不匹配时,它是无效的)。用户的ID令牌也可以被验证;参见documentation。