2012-12-11 17 views
7

私はいくつかのサブドメインusergroupXYZ.onruby.de上で動作するアプリケーションを実行しており、任意のドメインをエイリアスとしてサポートしています。 yourusergroup.onruby.deまたはcustomdomain.deを介してドメインにアクセスできます。複数のドメインを持つgithub oauth

このアプリはtwitter oauthとgithub oauth2からのログインを提供します。

問題は、カスタムドメイン経由でgithub認証をサポートする方法が見つからないということです。私はいつもギターからのエラーredirect_uri_mismatchを得る。

twitter authは別のドメインにリダイレクトする際に問題がありません。

カスタムドメインごとにgithubアプリケーショントークンを作成する以外に、この問題を解決する方法はありますか?

答えて

9

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

異なるコンテキストが許可されるため、基本コールバックURLに異なるコンテキストを作成し、コンテキスト情報を使用して特定のホストにリダイレクトする方法があります。それは、あなたが「ブローカー」のように行動し、ターゲットホストに何らかの情報を渡す必要があることを意味します。

コールバックURLがoauth.onruby.deの場合、oauth.onruby.de/cust1oauth.onruby.de/cust2はGithubによると有効です。 /cust1cust1.de/cust2cust2.deにリダイレクトできます。

oauth.onruby.deはゲートウェイまたはブローカーとして機能し、セキュリティエクスポージャーがないことを確認する必要があります。

+0

はそれをチェックします – phoet

1

私たちはAkberが提案したようにしました。我々は2つのサイト、xxx.comxxx.co.ukを持っています。私たちは両方のサイトOAuthに1つのgithubアプリケーションを使いたいと思っています。

私たちはRailsとOmniAuth gemを使用しました。

私たちが行う必要がある最初の事は、コールバックURL

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 

の終わりにcomまたはco.ukを追加することであり、ここではgithubのOAuthのバック

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 
を呼び出したときにリダイレクトし、レールのミドルウェア・コードがあります
関連する問題