如何在 Angular.js(使用 Flask 后端 Web 应用程序)中实现基于 OpenID 的身份验证?
看起来 Angular.js 代码需要像这里找到的示例那样合并逻辑。
不过Flask端也应该有OpenID验证机制。
是否有一种“推荐”的方式来编写后端和前端的逻辑?
对于初学者,是否有 github 示例或其他相关资源?
如何在 Angular.js(使用 Flask 后端 Web 应用程序)中实现基于 OpenID 的身份验证?
看起来 Angular.js 代码需要像这里找到的示例那样合并逻辑。
不过Flask端也应该有OpenID验证机制。
是否有一种“推荐”的方式来编写后端和前端的逻辑?
对于初学者,是否有 github 示例或其他相关资源?
不幸的是,我没有要分享的示例应用程序,但这里有一个高级描述,我希望它是有用的。
让我们暂时忘记您有一个 AngularJS 应用程序并查看 OpenID 身份验证交换的工作原理:
因此,让我们看看当您将 AngularJS 添加到组合中时会发生什么。请注意,有很多方法可以做到这一点,我在下面描述的是一种可能性。
如果 Angular 应用程序向服务器发出需要身份验证的请求,服务器应该返回错误代码 401。例如,当 Angular 应用程序收到 401 时,它会弹出一个登录表单。
但是 OpenID 身份验证舞蹈不能全部在富 JS 应用程序的上下文中完成,因为它需要浏览器重定向。您的服务器端应用程序必须支持至少三种路由:
因此,用户连接到您的根 URL 并获取 AngularJS 应用程序,该应用程序以非身份验证状态启动。在某些时候,Angular 应用程序会提示用户登录,使用具有 OpenID 文本字段和提交按钮的表单。这些表单字段应该是发布到服务器的常规 HTML 表单的一部分,而不是附加到控制器的客户端 Angular 元素。表单的“action”属性应该指向服务器的 OpenID 登录路径。
当用户单击登录按钮时,服务器唤醒并接收开始 OpenID 身份验证的请求。此时,上面的步骤 1-5 无需更改即可运行。
在第 5 步结束时,服务器已在应用程序的数据库中找到用户。服务器现在可以做的是响应重定向回根 URL,以重新启动 Angular 应用程序。如果应用程序需要在非初始状态下重新启动,则可以在开始 OpenID 身份验证过程之前将要恢复的状态保存在客户端存储(例如 cookie)中。
但这还不够,服务器还需要向 Angular 传递有关登录用户的一些信息。一种方法是在重定向 URL 的查询字符串中附加用户的唯一 ID 或令牌,Angular 应用程序可以使用权。这将与上述步骤 6 中进入 cookie 的 ID 相同。
现在 Angular 应用程序重新启动,可以在必要时恢复其状态,并具有标识登录用户的 ID 或令牌。当应用程序需要向服务器发出 Ajax 请求时,它会随请求一起发送此 ID 或令牌。服务器可以对其进行验证,如果发现它是无效的或者如果它有一个过期日期并且发现它已经过期,则返回 401。
如果验证了与请求一起发送的标识,则可以执行请求并将响应发送回 Angular 应用程序。
只需删除用户 ID/令牌即可在客户端实现注销功能,以便将来向服务器发送的请求无需身份验证即可再次发送。
非常重要:Angular 应用程序和 Flask 服务器之间包含用户信息的所有交换都必须通过安全的 HTTP 完成。如果不是,您的 ID 或令牌将以纯文本形式传输。