gpt4 book ai didi

authentication - Google Classroom API 对象身份验证

转载 作者:行者123 更新时间:2023-12-03 00:30:12 25 4
gpt4 key购买 nike

我成功地在浏览器中使用 Google Classroom API 代表已使用 Google 客户端库通过 OAuth2 授予执行此操作权限的用户进行操作。我正在尝试弄清楚如何信任从浏览器发送到我的服务器的 API 结果。这是一个故事来解释我试图解决的端到端问题。

  1. 用户 X 使用 Google 登录登录我的网站,我将该用户的 Google 登录对象(以 id_token 的形式传输到我的服务器并进行解码以确保真实性,如 here 中详细描述)) 。该响应最终看起来像这个经过大量编辑的对象:

{
"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 类中执行某些操作,例如列出教室列表。因此,我通过 Google 提供的适当的 OAuth2 工作流程发送它们来请求许可。然后,在获得同意后,我进行所需的 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 如何让我在服务器端验证登录的真实性。

    如果有明确的方法可以做到这一点,我看不到。谁能帮我集中注意力?

    P。 S. 这是this question 的后续内容。不幸的是,它从未得到一个像样的答案。

    最佳答案

    无法防止有效用户从用户客户端浏览器向您的服务器发布虚假数据。

    一种选择是更新您的应用程序以启用对 Google API 的服务器端访问。

    这里有关于如何执行此操作的文档: https://developers.google.com/identity/sign-in/android/offline-access

    如果您可以从客户端请求访问访问 token ,您还可以执行以下请求模式:

    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 端点向 google API 服务器发出以下请求:

    GET /v1/courses HTTP/1.1
    Host: classroom.googleapis.com
    Content-length: 0
    Authorization: Bearer googles_api_access_token_here

    3) (2) 的响应被发送回您的应用程序服务器

    4) 您的应用程序服务器将类(class)列表响应给客户端。

    关于authentication - Google Classroom API 对象身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315894/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com