2012-12-11 3 views
7

나는 여러 하위 도메인 usergroupXYZ.onruby.de에서 실행되는 응용 프로그램을 실행 중이며 임의 도메인을 별칭으로 지원합니다. yourusrouproup.onruby.de 또는 customdomain.de를 통해 도메인에 액세스 할 수 있습니다.여러 도메인이있는 github oauth

이 응용 프로그램은 twitter oauth 및 github oauth2를 통해 로그인을 제공합니다.

문제는 사용자 정의 도메인을 통해 github 인증을 지원하는 방법을 찾지 못했기 때문입니다. 나는 항상 redirect_uri_mismatch github에서 오류가 발생합니다.

트위터 인증은 다른 도메인으로 리디렉션하는 데 문제가 없습니다.

누구나 각 사용자 정의 도메인에 github 응용 프로그램 토큰을 만드는 것 외에이 문제에 대한 해결책이 있습니까?

답변

9

콜백 URL을 무시할 수 있지만 OAuth 애플리케이션 설정의 호스트 이름과 일치해야합니다. 이 문서는 좋은 일치 및 나쁜 일치 목록을 제공합니다. http://developer.github.com/v3/oauth/#redirect-urls

서로 다른 컨텍스트가 허용되므로 기본 콜백 URL에 다른 컨텍스트를 만든 다음 컨텍스트 정보를 사용하여 특정 호스트로 리디렉션하는 것이 해결책입니다. 이는 '중개인'처럼 행동하고 대상 호스트에 정보를 전달해야 함을 의미합니다.

콜백 URL이 oauth.onruby.de 인 경우및 oauth.onruby.de/cust2은 Github에 따라 유효합니다. /cust1cust1.de/cust2 ~ cust2.de으로 리디렉션 할 수 있습니다.

oauth.onruby.de은 게이트웨이 또는 브로커 역할을하므로 보안 노출이 없는지 확인해야합니다.

+0

에서 확인합니다. – phoet

1

그래, 우리는 Akber가 제안한 것을했습니다. 우리는 두 사이트, xxx.comxxx.co.uk을 가지고 있으며 두 사이트 OAuth 모두에 대해 하나의 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 
를 호출 할 때 리디렉션하지 레일 미들웨어 코드입니다