2013-10-31 130 views
1

我正面臨着實現API來授權用戶並進行會話並啓動課程的問題。Docebo Api集成

所有喜歡做一個記號,並用REST API傳遞給它的全部步驟已經完成,在響應我收到的響應令牌成功。

現在的問題是,當我試圖打開一個課程鏈接,它重定向我到登錄頁面,儘管登陸過程。你能幫助建立一個會話,並讓我知道哪個API將用於創建一個會話,以便它不會將我重定向到登錄頁面。

+0

我們可以看到一些相關的代碼嗎?我們很難設想你的實施。 – afuzzyllama

+2

謝謝。將盡快添加代碼 –

回答

1

對於那些仍然在尋找一個答案,我會告訴你如何生成一個臨時鏈接,將授權用戶,並引導他們在Docebo所需的位置。

你需要的東西:

  • 用戶名
  • SSO祕密的令牌哈希值。

    -In Docebo:點擊應用和功能的左側。點擊第三方集成。激活API和SSO(如果尚未激活)。在API和SSO處於活動狀態後,單擊其齒輪圖標。單擊以「使用...啓用SSO」開頭的複選框。在複選框下方的框中輸入SSO密碼。保存。


現在,對於實施。我自己使用了C#,但希望它可以輕鬆地翻譯成您選擇的語言(或缺少選擇)。

的基本思想是:

1)創建三個值的MD5哈希: (注意:生成哈希時包含的值之間逗號實施例下面進一步...)

  • 用戶名(小寫!!!)
  • 時間自Unix紀元中UTC =秒。
  • SSO祕密(一個自己輸入)。

2)獲取散列的十六進制值。

3)將目標網址與用戶名,時間和十六進制組合起來。像這樣:

HTTP [S]:// [YOURDOMAIN] /lms/index.php?r=site/sso & login_user = [用戶名] &時間= [UTC 時間] &令牌= [令牌] {& id_course = [id_course]} {& destination = [目的地]}

對於我的例子,我沒有指定課程或目的地。

這裏是上面的胡言亂語,在C#:

public string GenerateDoceboSSOLink() 
    { 
     string userName = "johnsmith"; //Note the lowercase!! 
     string domain = "http://my-test.docebosaas.com"; 
     string ssoSecret = "MySSOSecret"; 

     //Getting the seconds since the Unix Epoch 
     TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1)); 
     int time = (int)t.TotalSeconds; 

     //Creating the hash... 
     MD5 md5 = System.Security.Cryptography.MD5.Create(); 
     //Note the inclusion of the commas! 
     string input = userName + "," + time + "," + ssoSecret; 
     byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input); 
     byte[] hash = md5.ComputeHash(inputBytes); 

     //Getting the hex value of the hash. 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < hash.Length; i++) 
     { 
      sb.Append(hash[i].ToString("X2")); 
     } 

     string token = sb.ToString(); //the hex value, which we will call token 

     //The sso link. 
     string link = String.Format("{0}/lms/index.php?r=site/sso&login_user={1}&time={2}&token={3}", domain, userName, time, token); 
     return link;  
    } 

於是,我跟着this 不可能找到的文件,導致我給你看看上面有什麼(我無法找到的網址,所以我只是分享它)。