Mig*_*uel 21
不幸的是,我没有一个示例应用程序要分享,但这里有一个高级别的描述,我希望它是有用的.
让我们暂时忘记您有一个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传递一些有关登录用户的信息.一种方法是将用户的唯一ID或令牌附加到重定向URL的查询字符串中,Angular应用程序可以访问.这将是上面第6步中进入cookie的同一段ID.
现在Angular应用程序重新启动,可以在必要时恢复其状态,并具有标识登录用户的ID或令牌.当应用程序需要向服务器发出Ajax请求时,它会将此ID或令牌与请求一起发送.服务器可以验证它并返回401,如果发现它无效或者它有一个到期日期并且发现它已过期.
如果验证了随请求一起发送的标识,则可以执行该请求,并且可以将响应发送回Angular应用程序.
只需删除用户ID /令牌,即可在客户端实现注销功能,以便将来发送给服务器的请求无需再进行身份验证.
非常重要:Angular应用程序和Flask服务器之间包含用户信息的所有交换必须通过安全HTTP完成.如果不是,您的身份证或代币将以纯文本格式旅行.
| 归档时间: |
|
| 查看次数: |
6219 次 |
| 最近记录: |