在 Desire2Learn Valence API 中,是否存在用于服务器应用程序的非交互式身份验证流程?Valence 文档似乎假设任何身份验证应用程序都是交互式客户端进程。
3 回答
我们实际上是通过非交互方式登录网站来实现这一点的。如果您尝试此路线,请确保获取 d2lSecureSessionVal、d2lSessionVal 和登录 cookie,并将它们添加到您的后续请求中。
请求 1:1 > POST http{s}://elearning.test.masked.edu/d2l/lp/auth/login/login.d2l 1 > 内容类型:application/x-www-form-urlencoded userName={您的用户名}&password={您的密码}
回应1:
1 < Set-Cookie: LoginKey=; expires=Sat, 01-Jan-2000 05:00:00 GMT; path=/
1 < Set-Cookie: d2lSecureSessionVal=masked; path=/; HttpOnly <-- grab this
1 < Set-Cookie: Login=true; path=/ <-- grab this
1 < Set-Cookie: d2lSessionVal=masked; path=/ <-- grab this
请注意,在此请求中,目标并不重要 Request 2: 2 > GET http{s}://elearning.test.masked.edu:443/d2l/auth/api/token?x_a=ZNsxGYZuSmasked&x_b=7jkhCKfEmaked&x_target =https%3A%2F%2Fwww.maked.edu 2 > Cookie:d2lSecureSessionVal=masked;d2lSessionVal=屏蔽;登录=真;
它会尝试将您重定向到目标站点。忽略重定向, x_a 是您真正追求的。
回应 2:
2 < 302
2 < X-AspNet-Version: 2.0.50727
2 < Date: Tue, 09 Oct 2012 14:03:45 GMT
2 < Content-Length: 248
2 < X-XSS-Protection: 0
2 < Location: http{s}://www.masked.edu?x_a=DxHmasked&x_b=aQVkg-7jkhCKfEmaked&x_c=IfLBcKYFf8masked
2 < Set-Cookie: TS50cdf6=masked; Path=/
2 < Content-Type: text/html; charset=utf-8
2 < X-Powered-By: ASP.NET
2 < Cache-Control: private
2 <
从此响应中获取 x_a 并将其用作您的请求中的 x_b
第一次是一个错误,因为有一个页面显示一个复选框以允许来自特定主机的请求。我们只是抓取了身份验证令牌请求并将其弹出到浏览器中。在选中该框以始终允许后,一切正常。
另请注意,身份验证令牌偶尔会过期。确保您为此编写代码并在它发生时重新进行身份验证。
我使用 PHP 示例代码中的入门示例代码(在您登录后向您显示浏览器中的用户密钥)来获取我创建的“服务帐户”的密钥。
然后我将它们放入一个 PHP 类中,我可以重用它来建立连接。所以在我的代码中,我可以调用
$authcontext = d2l::connect();
它真的像一个魅力。
这与位于此处的问题有些相关:
Desire2Learn REST API 与 SOAP 的身份验证方法
Valence API 确实需要发生交互式身份验证步骤,但是,对于非交互式应用程序,这可以在“安装时”完成。该过程的结果是可以“长时间”使用的密钥。
对于某些版本和服务包级别,这是 30 天,但可以设置为“不过期”。“未过期”是未来的预期默认值,但如果您的实例上仍将其设置为 30 天,您可以提出支持请求以进行更改。