python - Web 应用程序的安全性 - 将凭据传递给 Web 服务 API

标签 python flask adobe-connect

我是网络开发的初学者。我已经完成了大量的命令行和一些 gui python 开发,并使用 Drupal 和 Wordpress 以及静态 html/css 完成了 Web 开发,但从来不必担心管理 session 或登录用户。在少数需要的情况下,我只使用 Drupal/Wordpress。

我致力于学习 Flask/web 开发并且有一个我已经开始的项目。这是一个简单的 3 页应用程序,可以调用另一个站点的 XML API(我相信它被称为 REST API)。我要调用的网站是 Adob​​e 的 Connect,其中包含大量电子学习类(class)和学生数据。这是他们的“入门”API 文档的链接: http://help.adobe.com/en_US/connect/9.0/webservices/WS5b3ccc516d4fbf351e63e3d11a171dce72-7ff7_SP1.html

我的应用需要能够执行以下操作: 1. 当学生在我的 Flask 应用程序的表单中输入他们的用户 ID/密码时,我想调用 Connect API 并将他们登录到那里(因此模拟单点登录)。 2. 然后,我希望将用户重定向到一个页面,该页面列出了他们注册的类(class)(此数据是从 Connect API 提取的)。

我的问题/疑虑是关于 session 和用户安全的。 Connect API 文档建议仅通过 URL 进行调用。这对我来说似乎有点奇怪,但也许它是完全安全的?我想我只是想确保我没有“明文”传递用户凭据。那么确保我的网站是 https 并且调用是对 https URL(Connect 的 API 是)的正确方法吗?

我已经有一个 Python 命令行脚本,它成功地与 Connect 的 Web 服务集成 - 我可以登录用户、注销、调用以返回数据。我的下一步是将其重新创建为网络应用程序。

非常感谢任何建议/提示。

最佳答案

仅当您使用安全 HTTP(即 https://...)时,在 URL 中发送登录凭据才是安全的。您链接的 Adob​​e Connect 文档在注释中提到了这一点,但他们展示的许多示例都使用纯 http://...。非常具有误导性。

登录后,您会收到一个 session ,您必须发送该 session 来代替 future 请求的凭据。 session ID 的风险较低,但无论如何,通过安全 HTTP 发送所有请求来保护 session ID 也是一个好主意。

那么你还有第二个问题要解决。在将用户凭据发送到 Adob​​e Connect 之前,用户凭据需要从用户的计算机传输到您自己的服务器。您的服务器也应该使用安全的 HTTP。

最后,就像 Adob​​e Connect 使用您随所有请求传递的 session ID“记住”您一样,您需要为每个用户创建一个 session ,这样每次他们请求页面时您都会记住他们并且知道将哪个 Adob​​e session 用于您需要发送的请求。

对于您自己的 session ID,您可以重复使用 Adob​​e Connection session ID,您只需将它通过 cookie 发送给您的用户,然后您将在他们每次请求页面时取回它。更强大的解决方案要求您生成自己的 session ID(不同于 Adob​​e 的 session ID),并将您的 session 与用户数据库表中的 Adob​​e session 相关联。

有一个非常有用的扩展名为 Flask-Login,它可以管理用户 session 以进行身份​​验证。如果您决定实现自己的用户 session ,可能会节省一些时间。

祝你好运。

关于python - Web 应用程序的安全性 - 将凭据传递给 Web 服务 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19961098/

相关文章:

docker - 使用 Docker Compose 的 flask 和前端

python - 在 PythonAnywhere 上托管带有用户输入的简单脚本

python - session 未提交 - checkout 12b - Flask Web 开发

python - 羔羊化 : Allow limited flexibility in variable names in user defined functions

python - 机器学习: Convert array to list of dictionaries

php - 实现 Comet 服务器端后端的最简单方法是什么?

python - SMTP 邮件客户端 Python