一、引言
Http请求中认证挑战相关的代理如下:
1.将要发送一个认证挑战的请求
- connection:willSendRequestForAuthenticationChallenge:
2.是否能够对一个保护空间进行认证(已废弃)
- connection:canAuthenticateAgainstProtectionSpace:
3.收到一个请求的认证挑战
- connection:didReceiveAuthenticationChallenge:(已废弃)
- URLSession:didReceiveChallenge:completionHandler:
4.一个请求的认证挑战被取消(已废弃)
- connection:didCancelAuthenticationChallenge:
5.请求认证相关的凭据是否使用存储
- connectionShouldUseCredentialStorage:
刚看到这些代理方法的时候感觉不知道在做什么,具体应该怎么处理这些代理方法呢?
下面我们来看看认证挑战的相关的类有哪些。
1.URL认证挑战类:NSURLAuthenticationChallenge;
2.URL保护空间类:NSURLProtectionSpace;
3.URL凭证类:NSURLCredential;
4.URL凭证存储类:NSURLCredentialStorage;
5.URL认证挑战发射器:NSURLAuthenticationChallengeSender;
这几个类之间的关系以及处理过程如下图:
三、URL认证挑战类相关属性
1.保护空间:NSURLProtectionSpace *protectionSpace。
2.默认凭证(存储的或者URL自带的):NSURLCredential *proposedCredential。
3.之前认证失败次数:NSInteger previousFailureCount。
4.认证失败响应对象:NSURLResponse *failureResponse。
5.认证失败错误对象:NSError *error;。
6.认证挑战发射器,负责将凭据和相关操作推送到服务器:id<NSURLAuthenticationChallengeSender> sender。
四、URL保护空间类相关属性
1.领域、范围,此属性只针对Basic认证方式:NSString *realm。
2.凭证的发送是否使用安全保护:BOOL receivesCredentialSecurely。
3.此认证保护空间是否对应一个代理服务器:BOOL isProxy。
4.保护空间代理类型,如Http代理、socket代理等:NSString *proxyType。
5.主机、端口、协议:host、port、protocol。
6.鉴定方法,即此次认证使用的认证方式:NSString *authenticationMethod。
有如下几种认证方法:
默认:NSURLAuthenticationMethodDefault。
HttpBasic:NSURLAuthenticationMethodHTTPBasic。
HTTPDigest(摘要):NSURLAuthenticationMethodHTTPDigest。
HTMLForm:NSURLAuthenticationMethodHTMLForm。
Negotiate(协商,Kerberos or NTLM):NSURLAuthenticationMethodNegotiate。
NTLM(WindowsNT使用的认证方式):NSURLAuthenticationMethodNTLM。
ClientCertificate(客户端证书):NSURLAuthenticationMethodClientCertificate。
ServerTrust(服务器信任机制):NSURLAuthenticationMethodServerTrust。
7.客户端认证所能接受的证书列表,只读,此数组能够用来构建认证凭证:NSArray<NSData *> *distinguishedNames。
8.服务器信任对象,只读,此对象能够用来构建认证凭证:SecTrustRef serverTrust。
五、URL凭证类
1.凭证类型,每种类型分别提供了构造方法:(1)用户名密码凭证
(2)客户端证书凭证
(3)服务器信任凭证
2.凭证持久化策略:
(1)不保存,用完失效:NSURLCredentialPersistenceNone。
(2)在本次会话内生效:NSURLCredentialPersistenceForSession。
(3)本地持久保存;NSURLCredentialPersistencePermanent。
(4)iCloud共享同步保存:NSURLCredentialPersistenceSynchronizable。
六、URL凭证存储类
1.提供对凭证的存储、删除、查询功能;
2.凭证存储状态变更通知:NSURLCredentialStorageChangedNotification。
七、URL认证挑战发送器相关方法
1.对一个认证挑战对象使用生成的认证凭证:
- useCredential:forAuthenticationChallenge:
2.对一个认证挑战对象不使用凭据,然后继续。此调用会因为响应数据中返回响应错误码:
- continueWithoutCredentialForAuthenticationChallenge:
3.对一个认证挑战取消认证操作,此调用会是请求直接报错,错误代理方法会触发:
- cancelAuthenticationChallenge:
4.对一个认证挑战对象采用系统默认处理:
- performDefaultHandlingForAuthenticationChallenge:
5.拒绝一个认证挑战的保护空间并继续:
- rejectProtectionSpaceAndContinueWithChallenge: