0

CI 環境として使用するローカル ドローン サーバーをセットアップしようとしています。ソースコードは Github で管理しています。まず、Github で oauth アプリケーションを作成し、client_id と client_secret を取得します。次に、ドッカーとドローンをインストールします。その後、以下の設定を行いました/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

次に、以下のコマンドを実行して、ドローン Docker コンテナを起動します。

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

ブラウザでドローンリンクにアクセスすると、ログインボタンが表示されます。以下に示すように。

ここに画像の説明を入力

ログイン ボタンをクリックすると、コールバック 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アカウントにアクセスできるようにするためにその部分を実装する方法を知っている人はいますか?

ありがとう

4

1 に答える 1

1

GitHub で Drone アプリケーションを作成すると、リダイレクト URL フィールドがあり、次のように設定する必要があります。http://hostname.com/authorize

oauth フローを実行するとき、Drone はredirect_urlGitHub にクエリ パラメーターを提供し、ログインが成功した後にリダイレクトする場所を示します。以下のエラー メッセージは、redirect_urlクエリ パラメーターが GitHub で構成されたものと一致しないことを示しています。

+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application

githubのドキュメントから

アプリケーションに登録したものと一致しない redirect_uri を指定した場合、GitHub は、エラーを要約した次のパラメーターを使用して、登録されたコールバック URL にリダイレクトします。

これらの値は完全に一致する必要があることに注意してください。単純な http と https の不一致でもエラーが発生します。

Drone は Go で書かれているため、Ruby コードの目的が少し不明です。残念ながら、それは私がコメントできるものではありません。

最も一般的なエラーは、リダイレクト URL を正しく構成していないか、ドキュメントに従って構成X-Forwarded-Forせずにリバース プロキシの背後で Drone を実行していることです。X-Forwarded-ProtoDrone は、リバース プロキシの背後で実行するときにこれらの値を使用して、値を設定するときに使用される独自の URL を決定しredirect_urlます。

于 2016-12-13T16:09:24.330 に答える