9

複数のサブドメインusergroupXYZ.onruby.deで実行され、エイリアスとして任意のドメインもサポートするアプリケーションを実行しています。したがって、yourusergroup.onruby.deまたはcustomdomain.deを介してドメインにアクセスできます。

アプリは、twitteroauthおよびgithuboauth2を介してログインを提供します。

問題は、カスタムドメインを介してgithub認証をサポートする方法が見つからなかったことです。私はいつもredirect_uri_mismatchgithubからエラーを受け取ります。

Twitter認証では、別のドメインへのリダイレクトに問題はありません。

カスタムドメインごとにgithubアプリケーショントークンを作成する以外に、この問題の解決策を持っている人はいますか?

4

2 に答える 2

11

コールバック URL は上書きできますが、OAuth アプリケーション設定のホスト名と一致する必要があります。このドキュメントは、良い一致と悪い一致のリストを提供します: http://developer.github.com/v3/oauth/#redirect-urls

さまざまなコンテキストが許可されているため、1 つの解決策は、ベース コールバック URL でさまざまなコンテキストを作成し、コンテキスト情報を使用して特定のホストにリダイレクトすることです。これは、「ブローカー」のように振る舞い、ターゲット ホストに何らかの情報を渡す必要があることを意味します。

コールバック URL がoauth.onruby.deの場合、oauth.onruby.de/cust1oauth.onruby.de/cust2は Github に従って有効になります。/cust1その後、cust1.deおよび/cust2にリダイレクトできますcust2.de

oauth.onruby.deはゲートウェイまたはブローカーとして機能し、セキュリティ上の危険がないことを確認する必要があることに注意してください。

于 2012-12-12T14:29:23.710 に答える
2

はい、Akber が提案したことを行いました。2 つのサイトがxxx.comありxxx.co.uk、両方のサイトの OAuth に 1 つの github アプリを使用したいと考えています。

Rails と OmniAuth gem を使用しました。

最初に行う必要があるのは、コールバック URL の最後にcomorを追加することですco.uk

class OmniAuth::Strategies::GitHub
  # Some code are omitted    

  def callback_url
    url = super
    matches = url.match(/xxx\.([a-z|\.]+)(:\d+)?\//)
    if matches && matches[1] != 'com'
      tld = matches[1]
      url.gsub!("xxx.#{matches[1]}", 'xxx.com')
      url << "/#{tld}"
    end

    url
  end
end

これは、github OAuth がコールバックしたときにリダイレクトする Rails ミドルウェア コードです。

def call(env)
    match = env["PATH_INFO"].match(/\A\/users\/auth\/github\/callback\/(.+)\Z/)
    if match
      host = env["HTTP_HOST"]
      [301, {"Location" => "#{env['rack.url_scheme']}://#{host.gsub('com', match[1])}/users/auth/github/callback?#{env["QUERY_STRING"]}"}, self]
    else
      @app.call(env)
    end
end
于 2015-09-12T21:41:09.423 に答える