2012-12-20 57 views
1

我有要求從我的Django站點打開SQLServer報告。我可以通過存儲在會話中的URL重定向後在Django視圖報表服務器URL做到這一點,即:Django打開基本身份驗證的SQLServer報告

def show_report(request):  
    return redirect(request.session.get('_reporturl')) 

這工作得很好,但我想避免的ReportServer提示輸入用戶名和密碼。我得出結論(可能不正確),最好的方法是使用HTTP基本認證。

我發現在另一篇文章的基本身份驗證下面的代碼:

import urllib2, base64 
username = '<username>' 
password = '<password>' 
request = urllib2.Request(request.session.get('_reporturl')) 
base64string = base64.standard_b64encode('%s:%s' % (username, password)) 
request.add_header("Authorization", "Basic %s" % base64string) 
result = urllib2.urlopen(request) 

但是我不能得到這個在視圖中工作(Django視圖需要返回一個HttpResponse,所以我不能確定如何使用此代碼)。

我已經試過如下:

return redirect('http://<username>:<password>@' + request.session.get('_reporturl')) 

這似乎與基本身份驗證數據傳遞到報表服務器,但我得到的用戶名和密碼數進一步提示。

有沒有人設法在Django中使用基本身份驗證,還是有人設法打開SQLServer報告而不提示進行身份驗證?

回答

0

管理人配置Apache代理到報表服務器來解決此問題:

LoadModule proxy_html_module modules/mod_proxy_html/mod_proxy_html.so 
LoadModule xml2enc_module modules/mod_proxy_html/mod_xml2enc.so 
Include modules/mod_proxy_html/proxy_html.conf 

# set up proxy for SQL Server reports 
<Location /ReportServer/> 
    ProxyPass http://<reportserver>/ReportServer/ 
    ProxyPassReverse http://<reportserver>/ReportServer/ 
    SetEnv force-proxy-request-1.0 1 
    SetEnv proxy-nokeepalive  1 
    SetEnv proxy-initial-not-pooled 1 
    ProxyHTMLEnable On 
    ProxyHTMLURLMap http://<reportserver>/ReportServer/ /ReportServer/ 
    # Base64 encoding of "username:password" 
    RequestHeader set Authorization "Basic <base64 encoded string>" 
</Location> 

mod_proxy_html是http://www.apachelounge.com/download/win32/modules-2.2/mod_proxy_html-3.1.2-win32.zip下載的第三方模塊 - 打開拉鍊,在Program Files轉儲mod_proxy_html文件夾(86)\ Apache Software Foundation \ Apache2.2 \ modules。上面的部分包含必要的配置。 (它似乎包含在Apache的更高版本中。)

mod_proxy_html可能不是絕對必要的 - ProxyPassReverse指令是我認爲的重要指令 - 所以如果它導致問題,可以刪除執行LoadModule/Include的三行並刪除位置部分中的ProxyHTML行。