通过打开的EDX API身份验证或替代方案访问`suttern_view_url`



我正在研究一个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端点来返回内容?

如果唯一的方法是请求渲染的student_view_url,我该如何访问该页面?我在官方应用程序中唯一可以说出的方法是,它似乎正在传递cookie以使用studen_view_url进行身份验证,当它通过OAuth2端点授权用户时,它必须获得。我得到的cookie虽然无法工作,但我已经在Postman中进行了测试(如果我使用Chrome浏览EDX网站从Chrome浏览的cookie,它们确实有效)。这就求我一个问题,我的身份验证是正确的,因为当官方应用返回填充read write的范围和其他两个范围时,我没有返回任何范围。

我的身份验证返回的样本:

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

重申;

  1. 是否可以通过API请求HTML内容(因此在JSON请求中返回)而不是student_view_url

  2. 如果不是这样,我该如何验证访问student_view_url

所以我弄清楚了如何做点2

在请求任何HTML内容之前,您需要使用提供给其他端点的auth令牌登录端点{{root}}/oauth2/login/。这将传递回一个可用的sessionid cookie,该cookie将使您访问不公开的内容(只要用户可以访问)。

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

相关内容

最新更新