HTTP Basic Authentication认证方式和AFNetworking的header的设置
阅读原文时间:2021年04月21日阅读:1

第一:什么是 HTTP Basic Authentication?

HTTP Basic Authentication 是一种用来允许Web浏览器或其他客户端程序在请求时提供以用户名和口令形式的凭证。本人感觉这样解释还算满意。96%的网上解释是:网络请求是会弹出一个输入框让你输入信息,然后,服务器用401状态拒绝了请求,说明需要用户提供用户名和密码的基本身份认证。

第二:HTTP Basic Authentication 详细介绍。

Authentication( 认证 ) 是最简单认证方法,这种认证方法被广泛的使用。通过 HTTP 协议去访问一个使用 Basic Authentication 保护的资源时,服务器通常会在 HTTP 请求的 Response 中加入一个"401 需要身份验证"的 Header,来通知客户提供用户凭证后,才能以使用资源。如果正在使用 Internet Explorer 或者 Mozilla Firefox 这样的可视化浏览器来访问需要认证的资源,浏览器会弹出一个窗口,让你输入用户名和密码,如果所输入的用户名在资源使用者的验证列表,并且密码完全正确,此时,用户才可以访问受限的资源。

第三:HTTP Basic Authentication  的流程图。

第四:实例。

我们按我们一般的情况进行网络请求,返回的结果如下:

如果不明白上面的HTTP Basic Authentication ,这里无论你怎么改,是不加参数还是加参数,服务器给你的返回都是上面的图的结果。

第五:遇到上面情况的解决方法。

a1.客户端请求授权详细说明:接口使用HTTP Basic Authentication认证方式,添加Authorization 到 header, 加密方式 Authorization = Basic Base64.encode(client_key:client_secret);POST请求参数只需grant_type,值为client_credentials

a2.用户请求授权详细说明:接口使用HTTP Basic Authentication认证方式,添加Authorization 到 header, 加密方式 Authorization = Basic Base64.encode(client_key:client_secret);POST请求参数需要grant_type,值为password,以及用户的username和password

第六:实例代码演示。

+(AYTNetworking*)AYTNetworkingLink:(NSString*)TokenStr{

    static AYTNetworking * Net = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

// 创建请求对象

        Net = [[AYTNetworking alloc]initWithBaseURL:[NSURL URLWithString:AYT_URL]];

AFJSONResponseSerializer * ZSJ_AYT_Response = [AFJSONResponseSerializer serializer];

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

//本博客的关键代码

        [Net.requestSerializer setValue:TokenStr forHTTPHeaderField:@"authorization"];

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

        NSMutableSet * AYT_Set = [NSMutableSet setWithSet:ZSJ_AYT_Response.acceptableContentTypes];

// 添加数据解析类型

        [AYT_Set addObject:@"json/html"];

        [AYT_Set addObject:@"text/javascript"];

        [AYT_Set addObject:@"text/html"];

        [AYT_Set addObject:@"application/json"];

        [AYT_Set addObject:@"text/plain"];

        ZSJ_AYT_Response.acceptableContentTypes = AYT_Set;

ZSJ_AYT_Response.readingOptions = NSJSONReadingMutableContainers;

        ZSJ_AYT_Response.removesKeysWithNullValues = YES;

        Net.responseSerializer = ZSJ_AYT_Response;

    });

    return Net;

}

第七:实例的调用。(关键代码)。

NSString * Str = [NSString stringWithFormat:@"%@:%@",@"ios",@"ios_secret"];

NSData * Data  = [Str dataUsingEncoding:NSUTF8StringEncoding];

NSString * Base64 = [Data base64EncodedStringWithOptions:0];

    NSString * HJ = [NSString stringWithFormat:@"Basic %@",Base64];

[[AYTNetworking AYTNetworkingLink:HJ]PostAYTURL:@"/oauth2/accessToken"              parameters:@{@"grant_type":@"client_credentials"} success:^(id SuccessResponMessage) {

        NSLog(@"12:%@",SuccessResponMessage);

    } fail:^(id ErrorResponMessage) {

         NSLog(@"12:%@",ErrorResponMessage);

    } ];

运行输出的结果是: