我在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会话变量?我是否缺少配置变量?
答案 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