2011-05-01 88 views
7

我正在使用反向代理在自定義域上啓用ssl。該代理在公共頁面上正常工作,但是當用戶嘗試訪問login_required目錄時,登錄網址會在登錄後將它們轉移到我的appspot域中。Google App Engine:反向代理+ OpenID,用戶在登錄後被重定向到appspot域名

有沒有辦法讓用戶保留在自定義域中?

這裏是我的登陸處理程序:

class OpenIDLoginHandler(webapp.RequestHandler): 
    def get(self): 
     domain = self.request.get('domain') 
     continue_url = self.request.GET.get('continue') 

     if not continue_url: 
      continue_url = 'https://my_domain/login_required_directory/'  

     if domain: 
      self.redirect(users.create_login_url(dest_url=continue_url, 
       _auth_domain=None,federated_identity=domain)) 
     else:    
      login_url = users.create_login_url(dest_url=continue_url, 
       federated_identity='https://www.google.com/accounts/o8/id')   
      self.redirect(login_url) 

application = webapp.WSGIApplication(
        [          
         ('/_ah/login_required', OpenIDLoginHandler)], 
        debug=True)  

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

我試圖覆蓋在users.create_login_url呼叫的目的地網址 - 函數仍返回與Appspot上域爲「繼續」參數LOGIN_URL,像這樣的:

「的https:// appspot_domain/_ah/login_redir ClaimID的= HTTPS://www.google.com/accounts/o8/id &繼續= https://開頭appspot_domain」

我試圖簡單地重寫返回的login_url和re將「continue」參數放置在我的自定義域中,但這會導致404錯誤。

有什麼想法?

提前致謝!

+2

您可以將繼續URL設置爲appspot域上的頁面,該頁面發出最終重定向回代理域。不過,您可能會遇到Cookie問題。您的身份驗證Cookie始終會在appspot.com上設置;客戶端不會將cookie傳遞迴您的代理域。 – 2011-05-01 00:56:36

+0

@Drew,很遺憾,您對auth cookie是正確的。在使用代理域時,用戶會話無法識別,因此恐怕登錄後的重定向會導致無限重定向循環。似乎我可以通過直接從代理服務器處理登錄重定向來解決此問題,但是我找不到有關'/ _ah/login_redir'的任何文檔,這些文檔可以幫助我複製或完全理解其功能。 – 2011-05-02 18:12:50

回答

1

我不確定這是否適合您,但下一個版本的應用引擎聲稱支持自定義域名(http://code.google.com/appengine/business/)上的ssl。如果您的應用程序暫時不能投入使用,那麼等待他們正式添加支持後可能會更容易。他們似乎在約3個月的發佈週期(http://code.google.com/appengine/docs/revision_history.html)

+1

這是我的首選選項,我耐心等待發布。畢竟,誰想要處理管理反向代理的額外複雜性,更不用說另一個潛在的失敗點了? – 2011-06-17 15:23:17

0

您可以在app.yaml中自行處理,並使用通配符處理程序重定向所有請求ssl。如果你不想這樣處理所有的請求,你可以使用正則表達式來限制通配符。

的app.yaml:

application: yourthing 
version: 1 
runtime: python 
api_version: 1 

handlers: 

- url: .* 
    script: redirect_to_ssl.py 

這也清理可能從誰鍵入URL,用戶進來任何非HTTPS請求。