Page 179 - AngularJS权威教程
P. 179
16.7 使用 AngularJS 进行身份验证 159
现在请求的结果被转换成了JSON对象,可以像服务器本来返回的就是JSON格式一样来使用 1
这个对象。
2
16.7 使用 AngularJS 进行身份验证
大多数网络应用都有需要保护的资源,这些资源不能被公开访问,只能由可以被识别且信任 3
的授权用户访问。这些资源可能是付款信息,也可能是管理功能。
无论保护的资源是什么,进行保护的手段都是类似的。 4
如何实现服务器端身份验证并不是本章的内容主旨。本章集中介绍服务器端需要做什么来支
持前端实现此功能。 5
然后会介绍如何实现客户端的身份验证保护,以及这个流程中的一些边缘情况。
6
16.7.1 服务器端需求
7
首先必须保证服务器端API的安全性。由于我们处理的代码是未编译的,且可能是由不信任
的源发送的,不能假设所有的用户都聪明到可以认识到这些潜在的风险。
8
下面介绍常被用来保护客户端应用的两种方法。
1. 服务器端视图渲染 9
如果站点所有的HTML页面都是由后端服务器处理的,可以使用传统的授权方式,由服务器
端进行鉴权,只发送客户端需要的HTML。 10
2. 纯客户端身份验证
我们希望客户端和服务端的开发工作可以解耦并各自独立进行,且可以将组件独立地发布到 11
生产环境中,互相没有影响。因此,需要通过使用服务器端API来保护客户端身份验证的安全,
但并不依赖这些API来进行身份验证。 12
通过令牌授权来实现客户端身份验证,服务器需要做的是给客户端应用提供授权令牌。
令牌本身是一个由服务器端生成的随机字符串,由数字和字母组成,它与特定的用户会话相关联。 13
uuid库是用来生成令牌的好选择。 14
当用户登录到我们的站点后,服务器会生成一个随机的令牌,并将用户会话同令牌之间建立 15
关联,用户无需将ID或其他身份验证信息发送给服务器。
客户端发送的每个请求都应该包含此令牌,这样服务器才能根据令牌来对请求的发送者进行 16
身份验证。
服务器端则无论请求是否合法,都会将对应事件的状态码返回给客户端,这样客户端才能做 17
出响应。
例如,我们希望服务端对所有身份验证未通过的请求都返回401状态码。 18