2012-05-08 83 views

回答

0

這在一定程度上連接到位於這裏的問題是:

Authenticaton Method for Desire2Learn REST API vs SOAP

價的API確實需要已發生互動權威性的步驟,但是,這可以在「安裝時間」來完成對非交互式應用。該過程的結果是可以「長時間使用」的鍵。

對於某些版本和服務包級別,這是30天,但可以設置爲「不過期」。 「未過期」是預期的默認值,但如果您的實例仍設置爲30天,則可以提出支持請求以更改它。

2

我們實際上是通過非交互式登錄到站點來實現的。 如果您嘗試此路線,請確保抓取d2lSecureSessionVal,d2lSessionVal和登錄Cookie並將它們添加到您的後續請求中。

請求1: 1> POST HTTP {S}://elearning.test.masked.edu/d2l/lp/auth/login/login.d2l 1>內容類型:應用程序/ x-WWW-窗體-urlencoded 的userName = {您的用戶名} &密碼= {密碼}

響應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> 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 =掩蔽的;登錄= TRUE;

它會嘗試將您重定向到目標站點。忽略重定向,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在您的要求

第一次是不好的毛病,因爲那裏是顯示一個複選框以允許請求頁面來自特定的主機。我們只抓取了身份驗證令牌請求並將其彈出到瀏覽器中。在檢查框始終允許後,事情工作得很好。

還要注意auth令牌偶爾會過期。確保你編碼並在發生時重新進行驗證。

+0

它適合一次性使用。但是,應用程序使用Cookie和URL會有點危險。 D2L可以更改Cookie策略,因爲它不是受控界面的一部分,如果這一方更改了登錄順序或技術(Shib等),您最終會看到不同的頁面 – Cadmium

+0

同意這可能有點冒險。我們一直在這樣做,因爲化合價包含在D2L中___中,沒有一個問題___。如果您選擇對令牌進行硬編碼,則當令牌過期時(這似乎在每次升級後都會發生),您會感到驚訝。 –

3

我使用了PHP示例代碼中的入門示例代碼,該代碼在登錄後向您顯示瀏覽器中的用戶密鑰,以獲取我創建的「服務帳戶」的密鑰。

然後我把它們放到一個PHP類中,我可以重新使用它來建立連接。所以,在我的代碼,我可以叫

$authcontext = d2l::connect(); 

它確實就像一個魅力。