使用令牌登录到Moodle



我正试图找出如何从外部API服务登录到Moodle的解决方案。我在Moodle上启用了网络服务。我的应用程序使用Laravel构建的API,其中包含从另一个网页直接登录到Moodle的方法。现在我可以使用GuzzleHTTP POST请求获得令牌,如下所示:

$tokenBody = [
'username' => $userNameString,
'password' => $userNamePassString,
'service' => 'moodle_mobile_app'
];
$getToken = json_decode($callFedAuth->PostApi(env('TOKEN_URL'), $tokenBody));

在这里,我可以得到一个令牌和私有令牌,如下所示:

{
"token": "59a30c31b009e8330f175e7c308c8e25"
"privatetoken": "4iFZzVhhEZF2blYZXLOhLAr2uEjka8kuHxD9lQd9EQpwFEsNZiyoVcpTPwlfNF2j"
}

现在我如何使用这个令牌从我的API重定向或直接导航到用户Moodle主页?我可以向Moodle登录页面发出post请求,但这只会将html内容转储给我,而不会重定向。

我不确定您是否遇到重定向本身或身份验证部分的问题。在任何情况下,我将继续写几个指针,你可以看看,看看这是不是正确的方向。

登录部分应该能够通过使用凭据(我确实假设您总是通过$tokenBody提供凭据)通过POST命中authentication_endpoint来解决。我不精通Laravel库,但这里有一个PHP示例,如果你愿意,你应该能够转换:

$postData = array('username' => $username, 'password' => $password);
$post = http_post_fields('http://moodle.example.com/login/index.php', $postData);
$headers = http_parse_headers($post);
foreach($headers['Set-Cookie'] as $cookie)
{
$details = http_parse_cookie($cookie);
foreach ($details->cookies as $name => $value)
setcookie($name, $value, $details->expires, $details->path, 'example.com');
}

这应该工作,只要你在相同的域/子域没有太多的麻烦;如果它们在不同的服务器上,您可能会遇到麻烦,并且应该采用这些解决方案中的一种,以尽量不遇到安全漏洞,但这是另一个问题。

最重要的部分是解析响应上的cookie并正确设置它们。正如我所说,我不喜欢Laravel,但我认为这个应该可以:

  • Laravel在重定向前保存cookies
  • 响应链接:将cookie附加到响应。

最新更新