请求OAUTH令牌时出现Restangular错误

时间:2014-09-04 13:03:00

标签: angularjs cordova oauth restangular

我正在使用AppGyver和AngularJS构建移动应用程序。

在登录页面,我使用以下命令向我的Web API服务器发出POST请求:

Restangular.all("token")
.post({
    grant_type: "password",
    username:username,
    password:password
});

我的RESTangular以这种方式设置:

appServerModule.config(function(RestangularProvider) {

    RestangularProvider.setBaseUrl('http://192.168.1.58/AppServer/api');

    RestangularProvider.setErrorInterceptor(function(response) {

        steroids.logger.log("RestangularProvider error:" + JSON.stringify(response));
    });
});

当我执行POST请求时,我在记录器中得到以下输出:

"RestangularProvider error:{"data":"","status":0,"config":{"method":"POST","transformRequest":[null],"transformResponse":[null],"headers":{"Accept":"application/json, text/plain, */*","Content-Type":"application/json;charset=utf-8"},"url":"http://192.168.1.58/AppServer/api/token","data":{"grant_type":"password","username":"AppServer","password":"AppServer"}},"statusText":""}"

如您所见,错误消息不包含任何有用信息,因此我不知道出了什么问题。 我可以在浏览器中使用Postman执行POST,并且Web API设置为允许CORS。

我在这里缺少什么? 如何获得有关幕后发生的更多信息?

请注意我在移动设备上执行此操作。

额外信息: GET请求提供了预期的Restangular错误:

"RestangularProvider error:{"data":{"Message":"Authorization has been denied for this request."},"status":401,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"headers":{"Accept":"application/json, text/plain, */*"},"url":"http://192.168.1.58/AppServer/api/chapters"},"statusText":"Unauthorized"}"

1 个答案:

答案 0 :(得分:1)

OWIN OAuth 2.0授权服务器不支持令牌请求的JSON。

在从javascript客户端发出请求时,您需要使用x-www-form-urlencoded而不是JSON:

Restangular.all("token")
.post("grant_type=password&username=YourUsername&password=YourPassword", undefined, {
    'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
});