2016-12-12 40 views
0

我正在尝试设置一个本地无人机服务器作为我们的CI环境使用。我们的源代码由Github管理。 首先,我在Github上创建一个oauth应用程序并获取client_id和client_secret。 然后安装码头工人和无人驾驶飞机,在那之后我做了如下配置上/etc/drone/dronerc如何设置无人机服务器使用github oauth

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

当我点击登录按钮,我的回调URL被通知有以下错误信息:

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

下面是GitHub的回调URL服务器代码:

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

当您创建无人机应用在GitHub上存在应设置为类似于http://hostname.com/authorize

当执行OAuth的流量重定向URL字段中,无人机提供指示redirect_url查询参数的GitHub成功登录后重定向到哪里。下面的错误消息暗示redirect_url查询参数不匹配是在GitHub的配置

的+ REDIRECT_URI + MUST +匹配+为这+应用

的+注册+回调+ URL +从GitHub的文档

如果提供REDIRECT_URI不匹配什么你与你的应用程序中注册,GitHub上会重定向到注册的回调URL使用以下参数总结错误

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

由于Drone是用Go编写的,所以Ruby代码的目的有点不清楚。所以不幸的是,我不能评论这件事。

我可以说是最常见的错误是不正确配置重定向URL,或者没有配置X-Forwarded-ForX-Forwarded-Proto每个文档在后面跟着跑反向代理无人机。 Drone在反向代理后面使用这些值来确定自己的URL,该值在设置redirect_url值时被反过来使用。

相关问题