原创Blog,转载请注明出处
blog.csdn.net/hello_hwc
前言:可能在公司工作时间长了,以至于iOS都习惯性的写成了IOS,既然上一篇文章里一同学提出来了,我就改过来吧。本文介绍下服务器认证的流程,我对于服务器端的了解很少,所以如果有不准确的地方,欢迎指正,我会及时进行修改。
认证和授权
简单来说就是服务器上存储了很多资源,这些资源不是客户端都能访问的,客户端要访问资源的时候,要先让服务器知道,这些资源我可以访问,这就是一个认证和授权的过程。
私有平台(供自己的App使用的服务器)的认证方式
静态用户名密码
注意:具体情况和服务器端的设计有关系,并不是所有的都是这样的
- App用户名密码登录,然后把用户名密码发送给服务器,密码一般做加密处理.
- 服务器解密密码,然后进行认证,认证成功后,返回一个Session的ID和token,Session具有有效期
- App进行API请求的时候,会把SessionId发送给服务器,Session过期后,App自动用token获取新的Session。
动态密码
常见的是发动到手机上的动态密码。
BTY:
验证码
当服务器发现客户端登录异常的时候,会给App发送一张图片作为验证码。
开放平台的(供第三方应用访问)认证方式
常见两种方式
Http Basic Authorization
简单来说就是每次API请求都需要包括用户名密码,用户名密码作为http header的一行。
IOS的代码也比较简单
注意如下代码仅仅是加了一个授权的Header,如果要正常使用,通常还需要其他的header
NSString *username = @"";
NSString *password = @"";
NSMutableURLRequest * request = nil;
NSString *basicAuthStr = [NSString stringWithFormat:@"%@:%@",username,password];
NSData * basicAuthData = [basicAuthStr dataUsingEncoding:NSASCIIStringEncoding];
NSString * basicAuthValue = [NSString stringWithFormat:@"Basic %@",[basicAuthData base64EncodedDataWithOptions:0]];
[request setValue:basicAuthValue forHTTPHeaderField:@"Authorization"];
OAuth 2
主要包括四个部分
- RO(resource onwer)资源所有者,对资源又授权能力的人。
- RS (resource sever) 资源服务器,实际存储资源的设备
- Client 第三方应用,在RO授权后,就可以访问对应的资源
- AS (authorization server) 授权服务器,对访问者进行身份认证,为RO提供授权审批流程,最终颁发Access Token给访问者。Access Token具有实效。
大概的流程是这样的
- Client请求资源所有者要访问RO某些资源
- RO返回给Client一些临时token,让Client通过AS进行授权
- Client通过RO返回的东西,到AS进行授权
- AS授权成功后给Client返回Acccess Token
- 第三方应用拿着Access Token访问服务器
- 服务器验证Access Token,如果没有被伪造,时间没有过期,则返回给Cilent对应的资源,或者执行相关的操作。
以新浪微博的OAuth 2为例
第三方应用要访问新浪微博为例
- App向微博的RO提供APP KEY(应用唯一标示)和APP secret(应用秘钥),这些可提前在微博上申请
- 微博RO验证App身份后,提供RO一个临时OAuth_token(授权token)
- App携带临时OAuth_token到AS的授权链接上进行授权(本地的微博应用或者是webview)
- 用户输入用户名密码,并且同意授权,然后AS返回Access Token
- App拿着Access Token就可以进行相关的Http操作,例如分享微博等。
时间: 2024-10-09 23:33:52