从授权的Auth0应用程序用户向GitHub API发送经过身份验证的请求

时间:2016-02-15 02:34:00

标签: angularjs github oauth-2.0 jwt auth0

我很难将经过身份验证的API请求提交给GitHub。我在GitHub中创建了一个授权应用程序,并将其连接到我的Auth0帐户。我没有问题让用户使用他们的GitHub帐户登录,但一旦他们登录我无法向GitHub API发出经过身份验证的请求(我正在尝试在用户的GitHub存储库之一中设置GitHub webhook)。我的所有请求都因拒绝凭据而被拒绝。

我将Auth0发布的JWT在每个请求中发送到GitHub API端点,但看起来好像这还不够。从我的用户返回的Auth0配置文件中似乎有一个access_token,但是发送它也不起作用。

以下是我的Auth0登录代码(使用Angular API):

angular.module('myApp').controller('LoginCtrl', ['$scope', '$http', 'auth', 'store', '$location',
    function ($scope, $http, auth, store, $location) {
      $scope.login = function () {
        auth.signin({
            authParams: {
               responseType: 'token' // I think this is the default but just in case
            }
        }, function (profile, token) {
            // Success callback
            store.set('profile', profile);
            store.set('token', token);
            $location.path('/');
        }, function () {
            // Error callback
            console.debug("error logging in");
        });
      };
}]);

这很好用。他们授权GitHub应用程序绑定到我的组织的Auth0帐户,其请求的权限没有问题,并返回我的应用程序,然后我可以访问与他们的GitHub帐户绑定的Auth0配置文件,但是如果我尝试制作一个代表他们对GitHub API进行身份验证的请求:

var username = auth.nickname;
var repo = "some_user.github.io"; // todo: get repo from setup process
var url = "https://api.github.com/repos/" + username + "/" + repo + "/hooks/";
var conf = {
    name: "web",
    active: true,
    config: {
        "url": "https://webtask.it.auth0.com/api/run/wt-my-container_com-0/echo?webtask_no_cache=1",
        "content_type": "json"
    }
};
$http.post(url, conf).success(function(data, status) {
    console.log("post successful:");
    console.log(status);
    console.log(data);
});

... GitHub拒绝请求,要么说请求资源不存在(以防止私有数据泄漏),要么我提供了错误的凭据,具体取决于不同的变量(如果我尝试提供" access_token"在其Auth0配置文件中提供的字段作为查询参数或提供我的Auth0应用程序的客户端密钥等。

我已经仔细检查了Auth0和GitHub的文档,试图弄清楚正确的程序是什么(例如,我是否需要自己实现整个OAuth2令牌流?看起来Auth0应该为我这样做)但是到目前为止我没有尝试过任何工作,谷歌上的任何内容都没有指出我正确的方向。我已经尝试了许多其他方法来做到这一点但没有成功,但我不想让这篇文章过得更长。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我明白了。有两个问题:一,在我对GitHub端点的API调用结束时,一个尾随斜线已经悄悄进入,这显然会破坏某些东西并导致GitHub拒绝该请求,其次,我已经设置了沿授权发送的东西根据Auth0指南中的每个请求标头:https://auth0.com/docs/client-platforms/angularjs,特别是此部分:

myApp.config(function (authProvider, $routeProvider, $httpProvider, jwtInterceptorProvider) {
  // ...

  // We're annotating this function so that the `store` is injected correctly when this file is minified
  jwtInterceptorProvider.tokenGetter = ['store', function(store) {
    // Return the saved token
    return store.get('token');
  }];

  $httpProvider.interceptors.push('jwtInterceptor');
  // ...
});

但是GitHub并不喜欢它,因为它不包含它期望的令牌,并且如果它看到它将拒绝该请求。删除尾部斜杠并删除上面的代码后,一切都按预期开始工作。

答案 1 :(得分:0)

看看this gitHub page。有点像这样的东西:

//'common' will add the headder to every request.
 $httpProvider.defaults.headers.common["Authorization"] = token YOUR_TOKEN;