【问题标题】:Desire2Learn Valence API non-interactive authenticationDesire2Learn Valence API 非交互式身份验证
【发布时间】:2012-05-08 17:21:43
【问题描述】:

在 Desire2Learn Valence API 中,是否存在用于服务器应用程序的非交互式身份验证流程? Valence 文档似乎假定任何身份验证应用程序都是交互式客户端进程。

【问题讨论】:

    标签: desire2learn


    【解决方案1】:

    我们实际上是通过非交互方式登录网站来实现的。 如果您尝试此路线,请确保获取 d2lSecureSessionVal、d2lSessionVal 和登录 cookie,并将它们添加到您的后续请求中。

    请求 1: 1 > 发布 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
    

    请注意,在这个请求中,目标并不重要 要求 2: 2 > 获取 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

    第一次是一个错误,因为有一个页面显示一个复选框以允许来自特定主机的请求。我们刚刚抓取了身份验证令牌请求并将其弹出到浏览器中。选中复选框以始终允许后,一切正常。

    另请注意,身份验证令牌有时会过期。确保您为此编写代码并在发生这种情况时重新进行身份验证。

    【讨论】:

    • 它适用于一次性。但是,应用程序使用 cookie 和 URL 有点危险。 D2L 可以更改 cookie 策略,因为它不是受控界面的一部分,如果一方更改其登录顺序或技术(Shib 等),您最终会看到不同的页面
    • 同意这可能有点冒险。自从 valence 被包含在 D2L 中以来,我们一直在这样做没有一个问题。如果您选择对令牌进行硬编码,那么当令牌过期时(这似乎在每次升级后都会发生),您会感到意外。
    【解决方案2】:

    我使用 PHP 示例代码中的入门示例代码(在您登录后向您显示浏览器中的用户密钥)来获取我创建的“服务帐户”的密钥。

    然后我将它们放入一个 PHP 类中,我可以重用它来建立连接。所以在我的代码中,我可以调用

    $authcontext = d2l::connect();
    

    它真的像一个魅力。

    【讨论】:

      【解决方案3】:

      这与位于此处的问题有些相关:

      Authenticaton Method for Desire2Learn REST API vs SOAP

      Valence API 确实需要执行交互式身份验证步骤,但是对于非交互式应用,这可以在“安装时”完成。该过程的结果是可以“长时间”使用的密钥。

      对于某些版本和服务包级别,这是 30 天,但可以设置为“不过期”。 “不过期”是未来的预期默认值,但是,如果您的实例上仍将其设置为 30 天,您可以提出支持请求以进行更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-10
        • 2023-02-07
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        相关资源
        最近更新 更多