我是网络开发的初学者。我已经完成了大量的命令行和一些 gui python 开发,并使用 Drupal 和 Wordpress 以及静态 html/css 完成了 Web 开发,但从来不必担心管理 session 或登录用户。在少数需要的情况下,我只使用 Drupal/Wordpress。
我致力于学习 Flask/web 开发并且有一个我已经开始的项目。这是一个简单的 3 页应用程序,可以调用另一个站点的 XML API(我相信它被称为 REST API)。我要调用的网站是 Adobe 的 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 中发送登录凭据才是安全的。您链接的 Adobe Connect 文档在注释中提到了这一点,但他们展示的许多示例都使用纯 http://...
。非常具有误导性。
登录后,您会收到一个 session ,您必须发送该 session 来代替 future 请求的凭据。 session ID 的风险较低,但无论如何,通过安全 HTTP 发送所有请求来保护 session ID 也是一个好主意。
那么你还有第二个问题要解决。在将用户凭据发送到 Adobe Connect 之前,用户凭据需要从用户的计算机传输到您自己的服务器。您的服务器也应该使用安全的 HTTP。
最后,就像 Adobe Connect 使用您随所有请求传递的 session ID“记住”您一样,您需要为每个用户创建一个 session ,这样每次他们请求页面时您都会记住他们并且知道将哪个 Adobe session 用于您需要发送的请求。
对于您自己的 session ID,您可以重复使用 Adobe Connection session ID,您只需将它通过 cookie 发送给您的用户,然后您将在他们每次请求页面时取回它。更强大的解决方案要求您生成自己的 session ID(不同于 Adobe 的 session ID),并将您的 session 与用户数据库表中的 Adobe session 相关联。
有一个非常有用的扩展名为 Flask-Login,它可以管理用户 session 以进行身份验证。如果您决定实现自己的用户 session ,可能会节省一些时间。
祝你好运。
关于python - Web 应用程序的安全性 - 将凭据传递给 Web 服务 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19961098/