Django使用基本身份验证打开SQLServer报告

时间:2012-12-20 15:46:28

标签: django

我需要从我的Django站点打开SQLServer报告。我可以通过在会话中存储URL后重定向到Django视图中的报表服务器URL来实现这一点,即:

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报告?

1 个答案:

答案 0 :(得分: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下载的第三方模块 - 打开zip并将mod_proxy_html文件夹转储到Program Files(x86)\ Apache Software Foundation \ Apache2.2 \ modules下。必要的配置包含在上一节中。 (它似乎包含在Apache的更高版本中。)

mod_proxy_html可能不是绝对必要的 - 我认为ProxyPassReverse指令是重要的 - 所以如果它导致问题,你可以删除三行执行LoadModule / Include并删除Location部分中的ProxyHTML行。