使用wfastcgi.py从Flask App读取IIS会话变量

时间:2018-04-13 20:37:05

标签: session iis flask iis-7

我在IIS 7.0上使用Flask 0.12构建一个安全的应用程序。该网站位于子域名中,因此其网址全部以:

开头
my_file

https://<subdomain>.<domain>/<app_name>/ 删除这些前缀并仅将路径名称传递给我的Flask应用程序。因此,上述网址将作为路线wfastcgi.py呈现给我的应用。还有其他Web应用程序(ASP.net和PHP)托管在同一个子域中,但具有不同的/常量。

由于我的用户在访问我的应用程序之前需要登录服务器,因此我想使用他们的Windows域唯一用户ID来管理应用程序中的逐页权限。在ASP.NET中,我可以使用app_name执行此操作,但在Flask中无法使用。当我像这样转储会话内容时:

httpcontext

我得到一个空白页面作为回应。

如何从Flask应用程序访问我的IIS会话变量?我是否缺少配置变量?

1 个答案:

答案 0 :(得分:1)

当用户通过IIS进行身份验证时,其用户名将出现在REMOTE_USER环境变量中。其他上下文信息也存储在不同的环境变量中。您可以配置哪些变量可供应用程序使用,但默认情况下应该REMOTE_USER和其他一些变量。

因此,您应该能够通过os.environ.get('REMOTE_USER')获取登录用户。

@app.route('/')
def index():
    username = os.environ.get('REMOTE_USER')
    template = "<h1>User: {{ username }}</h1>"
    return render_template_string(template, username=username)

如果您希望Flask会话了解用户会话,则需要让用户登录Flask应用程序,而不是IIS。或者,您可以拥有一个中间件,根据REMOTE_USER环境变量将用户登录到Flask应用程序中。例如,使用flask_login扩展名应该可以实现这一点。

编辑:

您还可以通过request代理对象访问环境变量。例如request.environ['REMOTE_USER']。另请参阅request.authorization