2016-07-25 28 views
3

我正在爲我的公司構建一個內部Web應用程序,並希望使用我們的Google Apps域來管理來自我們公司的訪問域名用戶名(example.com爲這個問題的其餘部分)。使用「hd」參數限制Google OAuth訪問一個域名(Django/python-social-auth)

我使用:

Django==1.9.5 
python-social-auth==0.2.19 
+ dependencies 

從閱讀其他SO的問題,我已經發現了goog 「託管域名」,可以通過下面的設置來使用(HD)參數:

SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = {'hd': 'example.com'} 

該參數正在成功附加到初始請求,我可以在授予訪問權之前在URL中看到它。

但是,它並沒有像我期望的那樣工作。我已經能夠成功驗證兩個非公司的電子郵件地址。

我誤解了「hd =」參數的工作方式,還是我需要在Google管理控制檯上的其他位置限制通過應用程序訪問?或者它僅在OAuth2流程中不受支持?

在此先感謝您的幫助。

回答

2

我知道這是一個較舊的帖子,但我發現它搜索如何向OAuth2添加額外的url參數。我無法弄清楚如何設置hd參數。

根據您的情況,將白名單設置爲您要接受的域。他們將能夠通過將其未指定的託管域帳戶添加到Google進行身份驗證,但不會登錄到您的站點。他們將收到AuthForbidden例外消息「您的憑據不被允許」。

要建立在你的網站上接受域的白名單,以下內容添加到settings.py:

SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS = ['domain.com', 'example.org'] 

您也可以建立一個友好的頁面,使他們沒有得到默認的500錯誤頁面:

SOCIAL_AUTH_LOGIN_ERROR_URL = '/authentication_error/' 
SOCIAL_AUTH_BACKEND_ERROR_URL = '/authentication_error/' 

更新urls.py使這個url指向一個有良好HTML頁面的視圖,讓他們知道出了什麼問題。