通过 Open Edx API 身份验证或替代方法访问 `student_view_url`?

Accessing the `student_view_url` via Open Edx API authentication or alternatives?

我正在开发一个 React Native 应用程序,其中所有 Edx 课程信息都需要离线显示。

我已经使用 oauth2 端点(client_id=…&grant_type=password&username=user@example.com&password=p455w0rd{{root}}/oauth2/access_token/)对应用程序进行了身份验证,并且可以访问 API 端点来让用户注册课程({{root}}/api/enrollment/v1/enrollment)以及这些课程中的模块 ({{root}}/api/courses/v1/blocks/?course_id={{course_id_url_friendly}}&depth=all&nav_depth=3&return_type=list&username={{username}})。我正在努力获取的是 HTML 块的内容。

我在官方应用程序中看到(当通过代理查看请求时)它将请求课程的实际网页,大概是 student_view_url

这是获取该内容的唯一方法,还是有一个 API 端点我可以用来 return 内容?

如果唯一的方法是请求呈现的 student_view_url,我该如何访问该页面?我在官方应用程序中唯一可以判断的方式是它看起来正在传递 cookie 以使用 studen_view_url 进行身份验证,它必须在通过 oauth2 端点授权用户时获得。我得到的 cookie 不起作用,我已经在 Postman 中测试过(如果我使用我在 Chrome 中浏览我的 Edx 网站得到的 cookie,它们确实起作用)。这让我想到了一个问题,我的身份验证是否正确,因为当官方应用程序 return 的范围填充了 read write 和其他两个范围时,我没有得到任何范围 returned。

我的身份验证示例 returns:

{ "access_token": "a12345...", "token_type": "Bearer", "expires_in": 2591999, "scope": "" }

重申;

  1. 有没有办法通过 API 请求 HTML 内容(所以 return 在 JSON 请求中编辑)而不是student_view_url

  2. 如果不是,那么我如何进行身份验证才能访问 student_view_url

所以我想出了如何做第 2 点

在请求任何 HTML 内容之前,您需要使用您提供给其他端点的身份验证令牌访问端点 {{root}}/oauth2/login/。这将传回可用的 sessionid cookie,让您可以访问非 public 的内容(只要用户有权访问)。

顺便说一句,要通过 fetch() 请求传递 cookie,我必须传递选项 credentials: 'include'