上一篇我们介绍了如何使用vue resource处理HTTP請求结合服务端的REST API,就能够很容易地构建一个增删查改应用
这个应用始终遗留了一个问题,Web App在访问REST API时没有经过任何认证,这使得服務端的REST API是不安全的只要有人知道api地址,就可以调用API对服务端的资源进行修改和删除
今天我们就来探讨一下如何结合Web API来限制资源的访问。
当今很多应用,客户端和服务端是分离的服务端是基于REST风格构建的一套Service,客户端是第三方的Web應用客户端通过跨域的ajax请求获取REST服务的资源。
然而REST Service通常是被设计为无状态的(Stateless)这意味着我们不能依赖于Session来保存用户信息,也不能使鼡Session["UserID"]这种方式确定用户身份
解决这个问题的方法是什么呢?常规的方法是使用OAuth Web API可以跳过此段落。
这些OAuth配置项我们只用关注其中的两项:
通俗地讲客户端输入用户名、密码,点击登录后会发起请求到。
IdentityConfig.cs:配置用户名和密码的复杂度主要用于用户注册时。例如:不允许用户名为纯字母和数字的组合密码长度至少为6位…。
GET请求测试成功可以获取到JSON数据。
POST请求测试不通过提示:验证不通过,请求被拒绝
服务端的环境已经准备好了,现在我们就逐个实现用戶注册、登录以及API调用功能吧。
页面的HTML代码如下:
创建Vue实例然后基于$.ajax发送用户注册请求:
创建Vue实例,然后基于$.ajax发送用户登录请求:
在試验这个示例时把Fiddler也打开,我们一共进行了3次操作:
注意第2次操作在Fiddler中查看服务端返回的内容:
基於注册画面,添加一段HTML代码:
在Vue实例中添加一个callApi方法:
在试验这个示例时我们一共进行了5次操作:
有人可能会注意到为什么每次点击[调用API]按钮,都发起了两次请求
更多CORS的知识,请参考MDN上的说明:
基于vue-resource實现这3项功能时沿用上面的HTML代码。
启用emulateJSON选项可以让浏览器不发送OPTIONS预请求,有两种启用方式
调用API的方法也更为简洁:
同样的,在发送請求前需要将access token添加到请求头。
本文在准备服务端环境的时候提供了一个CustomersController,除了GET操作其他操作的访问都是受保护的,需要用户登录以後才能操作
现在我们来实现这个示例, 该示例结合了上一篇的CURD示例以及本文的注册、登录、注销功能。
具体代码我就不再贴出来了夶家结合源代码试一试吧。