使用 wfastcgi.py 从 Flask 应用读取 IIS 会话变量
Reading IIS Session Variables from Flask App with wfastcgi.py
我正在 IIS 7.0 上使用 Flask 0.12 构建安全应用程序。该网站位于子域中,因此其网址均以:
开头
https://<subdomain>.<domain>/<app_name>/
wfastcgi.py
去掉这些前缀,只将路由名称传递给我的 Flask 应用程序。所以上面的 URL 将作为路由 /
呈现给我的应用程序。还有其他 Web 应用程序(ASP.net 和 PHP)托管在同一个子域上,但具有不同的 app_name
常量。
由于我的用户在访问我的应用程序之前需要登录服务器,我想使用他们的 Windows 域唯一用户 ID 来管理应用程序中的逐页权限。在 ASP.NET 中,我可以使用 httpcontext
来做到这一点,但这在 Flask 中不可用。当我像这样转储会话内容时:
@app.route('/session_tester')
def session_test():
return str(session)
我得到一个空白页面作为响应。
如何从 Flask 应用程序访问我的 IIS 会话变量?是否缺少配置变量?
当用户通过 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
我正在 IIS 7.0 上使用 Flask 0.12 构建安全应用程序。该网站位于子域中,因此其网址均以:
开头https://<subdomain>.<domain>/<app_name>/
wfastcgi.py
去掉这些前缀,只将路由名称传递给我的 Flask 应用程序。所以上面的 URL 将作为路由 /
呈现给我的应用程序。还有其他 Web 应用程序(ASP.net 和 PHP)托管在同一个子域上,但具有不同的 app_name
常量。
由于我的用户在访问我的应用程序之前需要登录服务器,我想使用他们的 Windows 域唯一用户 ID 来管理应用程序中的逐页权限。在 ASP.NET 中,我可以使用 httpcontext
来做到这一点,但这在 Flask 中不可用。当我像这样转储会话内容时:
@app.route('/session_tester')
def session_test():
return str(session)
我得到一个空白页面作为响应。
如何从 Flask 应用程序访问我的 IIS 会话变量?是否缺少配置变量?
当用户通过 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