Swift - HTTP网络操作库Alamofire使用详解4(用户权限认证)
作者:hangge | 2015-12-11 08:50
相关系列文章:(文章代码均已升级至Swift3)
Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)
Swift - HTTP网络操作库Alamofire使用详解2(文件上传)
Swift - HTTP网络操作库Alamofire使用详解3(文件下载,断点续传)
[当前文章] Swift - HTTP网络操作库Alamofire使用详解4(用户权限认证)
Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)
Swift - HTTP网络操作库Alamofire使用详解2(文件上传)
Swift - HTTP网络操作库Alamofire使用详解3(文件下载,断点续传)
[当前文章] Swift - HTTP网络操作库Alamofire使用详解4(用户权限认证)
八,使用Alamofire进行用户认证
比如:路由器的配置页面就常使用HTTP Basic认证。(浏览器输入路由器ip地址,如192.168.1.1,这时就会弹出个用户密码输入框进行权限验证。)
(2)BASE64 的加密强度非常低。当然,HTTP基本认证系统也可以与SSL或者Kerberos结合,实现安全性能较高(相对)的认证系统。
如果输入正确的用户名(hangge)和密码(123)则返回正常的数据,否则返回错误信息并需要继续输入:
6,客户端代码
1,Alamofire支持如下几种认证(Authentication)
HTTP Basic
HTTP Digest
Kerberos
NTLM
本文讲解使用 Alamofire 进行 HTTP Basic 验证。
HTTP Digest
Kerberos
NTLM
2,HTTP Basic认证介绍
(1)HTTP Basic认证是允许HTTP服务器对WEB浏览器进行用户身份证的方法。
(2)当一个客户端向HTTP服务器进行数据请求时,客户端会接收到HTTP服务器的身份认证要求,这时客户端会提示用户输入用户名及密码,然后将用户名及密码以BASE64加密。并于每次请求数据时,将密文附加于请求头(Request Header)中。
(3)HTTP服务器在每次收到请求包后,根据协议取得客户端附加的用户信息(BASE64加密的用户名和密码),解开请求包,对用户名及密码进行验证,如果用户名及密码正确,则根据客户端请求,返回客户端所需要的数据。否则,返回错误代码或重新要求客户端提供用户名及密码。
3,HTTP Basic认证的使用场景
HTTP基本认证只提供简单的用户验证功能,优点是使用简单,适合于对安全性要求不高的系统或设备中。比如:路由器的配置页面就常使用HTTP Basic认证。(浏览器输入路由器ip地址,如192.168.1.1,这时就会弹出个用户密码输入框进行权限验证。)
4,HTTP Basic认证的缺点
(1)没有灵活可靠的认证策略,如无法提供域(domain或realm)认证功能。(2)BASE64 的加密强度非常低。当然,HTTP基本认证系统也可以与SSL或者Kerberos结合,实现安全性能较高(相对)的认证系统。
5,服务端代码
为了测试Alamofire的认证功能,我们首先要在服务端创建个带有认证的页面用于测试。这里以PHP为例:
<?php //HTTP Basic认证 function authenticate() { header('WWW-Authenticate: Basic realm=""'); header('HTTP/1.0 401 Unauthorized'); echo "请输入正确的用户名和密码"; exit; } if (!isset($_SERVER['PHP_AUTH_USER']) || addslashes($_SERVER['PHP_AUTH_USER'])!= 'hangge' || addslashes($_SERVER['PHP_AUTH_PW'])!= '123') { //认证失败 authenticate(); } else { //认证成功 echo "欢迎您: {$_SERVER['PHP_AUTH_USER']}<br />"; echo "当前时间:".date('h:i:s'); //authenticate(); //重新开始 } ?>使用浏览器访问这个authenticate.php页面,则会弹出对话框要求输入用户名和密码:
6,客户端代码
使用Alamofire进行认证:
let user = "hangge" let password = "123" Alamofire.request("http://www.hangge.com/authenticate.php") .authenticate(user: user, password: password) .responseString { response in // debugPrint(response) print(response.result.value) }从控制台打印的消息可以看出,认证通过,并成功获取到数据:
全部评论(1)
又点到我知识盲区了,多谢。
请问这种服务器HTTP的Authentication和我们自己自定义进行POST认证的应用场景有什么区别吗
站长回复:与Form认证相比(不管是GET或POST,还是用AJAX来提交认证信息)。HTTP基本认证(HTTP Basic)主要是实现起来非常容易,使用简单,基本上所有网页浏览器都支持,需要认证时浏览器会自动弹出个框让你输入用户名密码。但缺点是客户端与服务端来回通信的安全性太低。
总之,HTTP基本认证建议只在小型的私有的系统中使用(比如路由器管理接口),对于可以公开访问的互联网网站、系统则不建议使用。