不幸的是,我没有共享的示例应用程序,但是这里有一个高级描述,希望对您有用。
让我们暂时忘记您拥有AngularJS应用,并回顾一下OpenID身份验证交换的工作方式:
因此,让我们看看将AngularJS添加到混合中时会发生什么。请注意,有很多方法可以做到这一点,我在下面描述的是一种可能性。
如果Angular应用程序向服务器发出要求身份验证的请求,则服务器应返回错误代码401。例如,Angular应用程序在获得401时可以弹出登录表单。
但是,在丰富的JS应用程序上下文中,OpenID身份验证操作无法全部完成,因为它需要浏览器重定向。您的服务器端应用程序将必须至少支持三种路由:
因此,用户连接到您的根URL并获取AngularJS应用,该应用以未认证状态启动。在某个时候,Angular应用程序将使用带有OpenID文本字段和提交按钮的表单提示用户登录。这些表单字段应该是发布到服务器的常规HTML表单的一部分,而不是附加到控制器的客户端Angular元素。表单的“操作”属性应指向服务器的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或令牌将以纯文本格式传输。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句