如何设置无人机服务器与github oauth一起工作

时间:2016-12-12 06:47:33

标签: oauth continuous-integration drone drone.io

我正在尝试设置本地无人机服务器以用作我们的CI环境。我们的源代码由Github管理。 首先,我在Github上创建一个oauth应用程序并获取client_id和client_secret。 然后安装docker和drone,之后我在/etc/drone/dronerc

上进行了以下配置
REMOTE_DRIVER=github
REMOTE_CONFIG=https://github.com?client_id=XXXXXX&client_secret=XXXXXX
DATABASE_DRIVER=sqlite3
DATABASE_CONFIG=/var/lib/drone/drone.sqlite

然后我运行以下命令启动无人机泊坞容器:

sudo docker run \
  --volume /var/lib/drone:/var/lib/drone \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --env-file /etc/drone/dronerc \
  --restart=always \
  --publish=80:8000 \
  --detach=true \
  --name=drone \
  drone/drone:0.4

我访问浏览器上的无人机链接,我可以看到一个登录按钮。如下图所示。

enter image description here

当我点击登录按钮时,我的回调网址会收到以下错误消息通知:

error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.

以下是Github回调网址的服务器代码:

get '/oauth/authorize' do
  # get temporary GitHub code...
  session_code = request.env['rack.request.query_hash']['code']

  # ... and POST it back to GitHub
  result = RestClient.post('https://github.com/login/oauth/access_token',
                          {:client_id => CLIENT_ID,
                           :client_secret => CLIENT_SECRET,
                           :code => session_code},
                           :accept => :json)

  # extract the token and granted scopes
  access_token = JSON.parse(result)['access_token']
  redirect 'http://10.0.0.24/'
end

在上面代码的最后一行中,重定向地址是无人机服务器地址。 我可能在OAuth身份验证部分做错了,但我不知道如何以正确的方式做到这一点。有谁知道如何实现该部分以允许无人机访问我的Github帐户?

由于

1 个答案:

答案 0 :(得分:0)

当你在GitHub中创建Drone应用程序时,有一个重定向url字段应该设置为http://hostname.com/authorize

执行oauth流时,Drone向GitHub提供redirect_url查询参数,指示成功登录后的重定向位置。以下错误消息表明redirect_url查询参数与GitHub中配置的参数不匹配

  

在+ REDIRECT_URI + MUST +匹配+为+注册+回调URL + + + +本申请

来自github文档

  

如果您提供的redirect_uri与您在应用程序中注册的内容不匹配,GitHub将重定向到已注册的回调网址,并使用以下参数汇总错误

请注意,这些值必须完全匹配。即使简单的http vs https不匹配也会导致错误。

有点不清楚Ruby代码的用途是什么,因为Drone是用Go编写的。所以不幸的是,这不是我能评论的内容。

我可以说最常见的错误是错误地配置重定向网址,或者在反向代理服务器后面运行Drone,而不是根据文档配置X-Forwarded-ForX-Forwarded-Proto。当在反向代理后面运行时,Drone使用这些值来确定自己的URL,该URL在设置redirect_url值时依次使用。