【问题标题】:Moodle - Trying to get token, receiving Forbidden 403Moodle - 尝试获取令牌,收到 Forbidden 403
【发布时间】:2014-09-24 14:51:11
【问题描述】:

我正在使用开源项目中的 TokenHttpRequest 类:

public String doHTTPRequest(String url){ 
        String responseBody = ""; 
        String token = "";

        DefaultHttpClient httpClient = new DefaultHttpClient();

        // Creating HTTP Post 
        HttpGet httpPost = new HttpGet(url); 

        try { 
            ResponseHandler<String> responseHandler=new BasicResponseHandler(); 
            HttpContext context = new BasicHttpContext();             context.setAttribute(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0");
            responseBody = httpClient.execute(httpPost, responseHandler, context); 

            JSONObject jObject = new JSONObject(responseBody);
            token = jObject.getString("token");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();            
        } catch (ClientProtocolException e) { 
            // writing exception to log 
            e.printStackTrace(); 
        } catch (IOException e) { 
            // writing exception to log 
            e.printStackTrace();       
        } 

        return token; 
    } 

在我访问的 moodle 站点更新到 2.7 之前,它运行良好。 现在httpClient.execute 行给出了错误 Forbidden 403。在浏览器中,url 工作正常。

这是我得到的:

09-24 17:42:58.246: W/System.err(8820): org.apache.http.client.HttpResponseException: Forbidden
09-24 17:42:58.246: W/System.err(8820):     at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71)
09-24 17:42:58.246: W/System.err(8820):     at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
09-24 17:42:58.246: W/System.err(8820):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
09-24 17:42:58.246: W/System.err(8820):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
09-24 17:42:58.246: W/System.err(8820):     at moodle.android.moodle.helpers.TokenHttpRequest.doHTTPRequest(TokenHttpRequest.java:86)
09-24 17:42:58.246: W/System.err(8820):     at ro.example.app.Login$2.run(Login.java:170)
09-24 17:42:58.246: W/System.err(8820):     at java.lang.Thread.run(Thread.java:841)

还有:

09-24 17:13:51.986: I/entity(2975):  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
09-24 17:13:51.986: I/entity(2975): <html><head>
09-24 17:13:51.986: I/entity(2975): <title>403 Forbidden</title>
09-24 17:13:51.986: I/entity(2975): </head><body>
09-24 17:13:51.986: I/entity(2975): <h1>Forbidden</h1>
09-24 17:13:51.986: I/entity(2975): <p>You don't have permission to access /login/token.php
09-24 17:13:51.986: I/entity(2975): on this server.</p>
09-24 17:13:51.986: I/entity(2975): </body></html>

当我尝试使用EntityUtils获取实体时

有人遇到过这个问题吗?

【问题讨论】:

    标签: android moodle


    【解决方案1】:

    第一次进行设置确实很痛苦,但有一些步骤可能会帮助您解决这个问题。

    1. 首先,Moodle 存在一个已知错误,即当您在 Web 上创建外部服务时,它不会在数据库上正确创建短名称。您可以通过访问数据库、转到表 external_services 并手动添加您在请求中使用的短名称来修复它。

    2. 为组启用权限。这可能是您的问题,要解决此问题,您需要进入用户>权限>定义角色。在那里编辑角色之一,使其能够创建令牌并访问 REST 协议。 (我通常允许为移动设备创建令牌并创建令牌)

    3. 完成最后一步后,请务必将此角色分配给您尝试访问的用户,转到“在系统中分配角色”并单击该角色。

    4. 最后,如果所有这些都不起作用,请尝试在整个设置中搜索任何可能说明 WebService 的复选框! :)

    希望能帮助你和像我这样被整整一周坚持下去的人!

    【讨论】:

    • 我已经检查过了,短名称在 external_services 表中;所有经过身份验证的用户都可以创建 Web 服务令牌并访问 REST API。所以除了可能的数据库错误之外,我不知道出了什么问题。
    • 你知道服务器响应你请求的消息是什么吗?
    • 我无法再次复制它以便能够在此处复制和粘贴它,但一个问题是它正在将一些消息作为对象而不是字符串返回,但即使使用上面的 JSON.stringify 并不是特别有启发性。我们认为可能是 Moodle 服务器的新安全设置导致了问题。
    • 太令人失望了.. 每个新版本都带有许多未记录的惊喜.. :/
    【解决方案2】:

    在 Moodle 3.8 上,您可以按照以下步骤进行设置:

    1. 在站点管理 -> 高级功能中启用 Web 服务。
    2. 在站点管理 -> 插件 -> 网络服务 -> 外部服务中启用 Moodle 移动网络服务。
    3. 在站点管理 -> 插件 -> Web 服务 -> 管理协议中启用所需的协议。
    4. 在站点管理 -> 插件 -> Web 服务 -> 管理令牌中为您计划用于进行 API 调用的用户生成令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 2019-02-20
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 2020-07-10
      • 2013-05-19
      相关资源
      最近更新 更多