2013-02-26 134 views
1

我正在爲我的應用程序創建一個API。一方面是API服務器(和主應用程序),另一方面是客戶端。服務器使用DoorKeeper使用OAuth 2.0保護API(基本上將主應用程序轉換爲OAuth 2.0提供程序),客戶端使用OmniAuth和我的應用程序的自定義策略。Rails 3 + Omniauth:將額外參數傳遞給api服務器(DoorKeeper)

主應用程序使用多租戶使用子域;所以每個客戶都有自己的子域名。還有一個oauth子域被路由到DoorKeeper界面。

當用戶單擊「使用我的應用程序登錄」鏈接時,他會重定向到oauth子域。如果他沒有登錄到主應用程序,他需要重定向到的登錄頁面正確的子域下。所以我需要將客戶端的帳戶名傳遞給服務器,以便DoorKeeper知道要重定向到哪個子域。

我該如何做到這一點?

我對這個主題進行了研究,並發現如何傳遞給OmniAuth參數,該參數將傳遞給回調操作。這些參數是否可用於服務器?

編輯:我沒有使用Devise!

編輯2:這是一些代碼。

客戶端應用程序會話控制器創建行動(我的應用登錄)
def set_client 
    self.current_client = Client.find(params[:client][:name]) 
    redirect_to "/auth/catapult?client=#{self.current_client.account_name}" 
end 

正如你所看到的,我追加客戶端參數去的OmniAuth路線,但這個參數是不能傳遞到服務器應用程序(看門人) ,所以我不知道在服務器應用上重定向到哪裏。

看門配置
resource_owner_authenticator do 
    p params 
    User.find_by_id(session[:user_id]) || redirect_to(log_in_path) 
end 

在上面的重定向,我需要指定客戶的賬戶名作爲子域,但由於params哈希表簡化版,包含我沒有這個信息(客戶的帳戶名)客戶端的我通過的帳戶名稱(客戶端參數)

回答

3

我發現瞭如何解決我的問題。我不得不深入研究OmniAuth源代碼。我不得不這樣做是我的自定義策略覆蓋request_phase方法如下:

def request_phase 
    redirect client.auth_code.authorize_url({:redirect_uri => callback_url, :catapult_client => request.params["client"]}.merge(authorize_params)) 
end 

:catapult_client時,添加要傳遞任何額外參數,它只是工作!

1

最簡單的方法是在重定向到登錄頁面時將位置重定向到驗證後成功地作爲查詢參數傳遞,因此它在那裏作爲GET請求的查詢字符串的一部分。存儲它,並在成功的身份驗證後,將它們重定向到那裏。根本不需要將這些數據包含在OAuth流程中。

當然,我假設他們都在也在他們的子域開始


編輯:

當用戶點擊「我的應用登錄」鏈接時,他被redireced到OAuth的子域。

  • 假設用戶開始在mysubdomain.yourapp.com,他們點擊「登錄與我的應用程序」鏈接。

  • 的鏈接還包含在它的子域的查詢參數,所以oauth.yourapp.com?redirect=mysubdomain.yourapp.com(或只是oauth.yourapp.com?redirect=mysubdomain

  • 用戶到達oauth.yourapp.com。該應用程序存儲查詢參數。用戶放入其詳細信息或重定向到服務...

  • OAuth進程完成後,用戶已通過身份驗證。

  • 將用戶重定向回到之前存儲的參數redirect

這是我要做的事,只是沒有使用Rails,但我不明白爲什麼你不能與任何框架使用此過程。正如我所提到的,這取決於用戶在正確的子域名上開始。

+0

對不起,我不明白你的答案......我添加了一些代碼來使問題更清楚。 – 2013-03-01 10:03:57

+0

@AzizLight我加了更多解釋。它會回答你的問題或提示你的更多信息:) – iain 2013-03-01 10:15:42

+0

基本上,用戶在沒有子域的情況下啓動,客戶端應用程序是一個不同的應用程序(通常它可以是一個移動應用程序,它只是碰巧它是另一個Rails應用程序),我需要做的,就是讓omniauth把額外的參數傳給門衛。所以基本上我不能使用你的方法,因爲我自己沒有做GET請求,OmniAuth是... – 2013-03-01 10:18:39