Canvas LTI 适用于 AWS 开发,但在生产中返回无效的消费者密钥负载均衡器

问题描述

我正在从客户端到我们的 AWS EC2 实施基本的画布 LTI。当端点是我们的开发 EC2 时,它工作正常。但是,当端点是我们的实时站点时,其中 EC2 位于负载均衡器之后,它会因“消费者密钥无效”而失败

基本代码完全相同,EC2 都来自同一个 AMI。

任何想法都值得赞赏!

解决方法

问题是 aws 负载均衡器通过 http 端口 80 连接到 EC2 目标,这导致 oauth 失败。

我不确定将 https/443 更改/添加到目标组会如何影响我的自动缩放组和健康检查等,因此我编辑了 OAuth.php 文件,删除了 from_request 函数中检查服务器是否正常的部分https 因为我们将始终为此通过 https 进行连接。

改变了这个:

public static function from_request($http_method=NULL,$http_url=NULL,$parameters=NULL) {
    $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
              ? 'http'
              : 'https';
    $http_url = ($http_url) ? $http_url : $scheme .
                              '://' . $_SERVER['SERVER_NAME'] .
                              ':' .
                              $_SERVER['SERVER_PORT'] .
                              $_SERVER['REQUEST_URI'];

为此:

 public static function from_request($http_method=NULL,$parameters=NULL) {        
        $scheme = 'https';
        $http_url = ($http_url) ? $http_url : $scheme .
            '://' . $_SERVER['SERVER_NAME'] .
            ':' .
            443 .
            $_SERVER['REQUEST_URI'];