我正在尝试设置本地无人机服务器以用作我们的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
我访问浏览器上的无人机链接,我可以看到一个登录按钮。如下图所示。
当我点击登录按钮时,我的回调网址会收到以下错误消息通知:
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帐户?
由于
答案 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-For
和X-Forwarded-Proto
。当在反向代理后面运行时,Drone使用这些值来确定自己的URL,该URL在设置redirect_url
值时依次使用。