我在实现 API 以授权用户并进行会话和启动课程时遇到问题。
所有完整的步骤,例如制作令牌并使用 REST API 传递它,并且在响应中我收到响应令牌中的成功。
现在的问题是,当我尝试打开课程链接时,尽管登陆课程,它仍会将我重定向到登录页面。您能否帮助建立一个会话并让我知道要使用哪个 API 来进行会话,这样它就不会将我重定向到登录页面。
我在实现 API 以授权用户并进行会话和启动课程时遇到问题。
所有完整的步骤,例如制作令牌并使用 REST API 传递它,并且在响应中我收到响应令牌中的成功。
现在的问题是,当我尝试打开课程链接时,尽管登陆课程,它仍会将我重定向到登录页面。您能否帮助建立一个会话并让我知道要使用哪个 API 来进行会话,这样它就不会将我重定向到登录页面。
对于那些仍在寻找答案的人,我将向您展示如何生成一个临时链接,该链接将授权用户并将他们引导到 Docebo 中的所需位置。
你需要的东西:
令牌哈希的SSO 密码。
- 在 Docebo 中:单击左侧的应用程序和功能。单击第三方集成。激活 API 和 SSO(如果尚未激活)。API 和 SSO 激活后,单击其齿轮图标。单击以“启用 SSO...”开头的复选框。在复选框下方的框中输入 SSO 密码。节省。
现在,为了实施。我自己为此使用了 C#,但希望它可以轻松翻译成您选择的语言(或缺乏选择)。
基本思想是这样的:
1)创建三个值的MD5散列:(注意:生成散列时在值之间包含逗号。下面的示例......)
2)获取哈希的十六进制值。
3) 将目标 url 与用户名、时间和十六进制结合起来。像这样:
http[s]://[yourdomain]/lms/index.php?r=site/sso&login_user=[username]&time=[utc time]&token=[token]{&id_course=[id_course]}{&destination=[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;
}
因此,我遵循了这个 无法找到的文档,它使我看到了您在上面看到的内容(我找不到网址,所以我只是分享了它)。