0

我很难将经过身份验证的 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");
        });
      };
}]);

这工作正常。他们授权与我组织的 Auth0 帐户绑定的 GitHub 应用程序,其请求的权限没有问题,然后返回我的应用程序,然后我可以访问与他们的 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 拒绝该请求,要么说请求资源不存在(以防止私人数据泄露),要么我提供了错误的凭据,具体取决于不同的变量(如果我尝试提供其 Auth0 配置文件中提供的“access_token”字段)作为查询参数或提供我的 Auth0 应用程序的客户端密码等)。

我已经搜索了 Auth0 和 GitHub 的文档,试图找出正确的程序是什么(例如,我是否需要自己实现整个 OAuth2 令牌流?似乎 Auth0 应该为我做这件事)但我什么都没有到目前为止尝试过的作品,谷歌上没有任何东西为我指明了正确的方向。我尝试了许多其他方法都没有成功,但我不想让这篇文章太长。任何帮助将不胜感激。

4

2 回答 2

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 不喜欢这样,因为它不包含它所期望的令牌,并且如果它看到它就会拒绝该请求。一旦我删除了斜杠并删除了上面的代码,一切都开始按预期工作。

于 2016-02-16T04:53:49.100 回答
0

看看这个 gitHub 页面。角度是这样的:

//'common' will add the headder to every request.
 $httpProvider.defaults.headers.common["Authorization"] = token YOUR_TOKEN;
于 2016-02-15T03:31:40.017 回答