Swift - HTTP网络操作库SwiftHTTP使用详解3(用户权限认证)
作者:hangge | 2016-02-03 08:30
六,使用SwiftHTTP进行用户认证
比如:路由器的配置页面就常使用HTTP Basic认证。(浏览器输入路由器ip地址,如192.168.1.1,这时就会弹出个用户密码输入框进行权限验证。)
(2)BASE64 的加密强度非常低。当然,HTTP基本认证系统也可以与SSL或者Kerberos结合,实现安全性能较高(相对)的认证系统。

如果输入正确的用户名(hangge)和密码(123)则返回正常的数据,否则返回错误信息并需要继续输入:
6,客户端代码
1,SwiftHTTP支持如下几种认证(Authentication)
HTTP Basic
HTTP Digest
本文讲解使用 SwiftHTTP 进行 HTTP Basic 验证。
HTTP Digest
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,服务端代码
为了测试SwiftHTTP的认证功能,我们首先要在服务端创建个带有认证的页面用于测试。这里以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,客户端代码
使用SwiftHTTP进行认证:
do {
let opt = try HTTP.GET("http://www.hangge.com/authenticate.php")
var attempted = false
opt.auth = { challenge in
if !attempted {
attempted = true
return NSURLCredential(user: "hangge", password: "123", persistence: .ForSession)
}
return nil //认证失败,返回nil取消请求
}
opt.start { response in
print(response.text)
}
} catch let error {
print("请求失败: \(error)")
}
从控制台打印的消息可以看出,认证通过,并成功获取到数据:

全部评论(0)