NSURLCredential
Overview
NSURLCredential是表示认证证书的不可变对象,该证书凭证包括特定于证书类型的认证信息和要使用的持久性存储器的类型(如果有的话)。
URL加载系统支持三种类型的凭据:基于密码的用户凭据,基于证书的用户凭据和基于证书的服务器凭据(在验证服务器的身份时使用)。
创建凭证时,你可以指定它应该用于单个请求,暂时存在(直到你的应用程序退出)或永久持久(在钥匙串中)。
Symbols
Creating a credential
-
+ (NSURLCredential *)credentialForTrust:(SecTrustRef)trust
创建并返回一个NSURLCredential对象,以使用给定的可接受的信任进行服务器信任身份验证。
在创建服务器信任凭证之前,NSURLConnection对象或NSURLDownload对象的代理对象负责评估信任。 通过调用
SecTrustEvaluate
来传递从服务器的NSURLProtectionSpace
对象的serverTrust
方法获得的信任(不懂~~~)。 如果信任无效,则应通过cancelAuthenticationChallenge:
取消认证挑战。
-
+ (NSURLCredential *)credentialWithUser:(NSString *)user password:(NSString *)password persistence:(NSURLCredentialPersistence)persistence
使用给定的persistence(枚举值,表示证书的保留时间),创建并返回使用给定的用户名和密码进行互联网密码验证的NSURLCredential对象。
如果persistence是NSURLCredentialPersistencePermanent,凭证将被存储在钥匙串中。
-
+ (NSURLCredential *)credentialWithIdentity:(SecIdentityRef)identity certificates:(NSArray *)certArray persistence:(NSURLCredentialPersistence)persistence
使用给定的persistence,创建并返回使用给定的身份和给定的客户端证书数组进行客户端证书身份验证NSURLCredential对象。
identity:证书的id;
certArray:一个表示证书的SecCertificateRef对象的数组。
-
- (instancetype)initWithIdentity:(SecIdentityRef)identity certificates:(NSArray *)certArray persistence:(NSURLCredentialPersistence)persistence
同上;
-
- (instancetype)initWithTrust:(SecTrustRef)trust
同
+ (NSURLCredential *)credentialForTrust:(SecTrustRef)trust
-
- (instancetype)initWithUser:(NSString *)user password:(NSString *)password persistence:(NSURLCredentialPersistence)persistence
同
+ (NSURLCredential *)credentialWithUser:(NSString *)user password:(NSString *)password persistence:(NSURLCredentialPersistence)persistence
Getting credential properties
-
@property(readonly, copy) NSString *user
证书的用户名;
-
@property(readonly, copy) NSArray *certificates
证书的凭据,如果它是客户端证书凭据。
这些凭据是SecCertificateRef对象。 如果这不是客户端证书凭证,则为零。
-
@property(readonly) BOOL hasPassword
证书是否有一个密码;
此方法不会尝试检索密码。如果该凭证的密码存储在用户的钥匙串中,即使此方法返回YES,密码也可能返回为nil,获取密码可能会失败,或者用户可能拒绝访问。
-
@property(readonly, copy) NSString *password
证书的密码;
如果你需要实际的密码值,你应该访问此属性。 如果只需要知道是否有密码,请使用hasPassword
属性。 访问此属性可能会导致用户访问的提示 - 例如,当密码存储在用户的钥匙串中。
-
@property(readonly) SecIdentityRef identity
证书的id,如果它是客户端证书凭据,如果不是则为NULL。
-
@property(readonly) NSURLCredentialPersistence persistence
证书的保留时间;
Constants
typedef enum NSURLCredentialPersistence : NSUInteger {
NSURLCredentialPersistenceNone,
NSURLCredentialPersistenceForSession,
NSURLCredentialPersistencePermanent,
NSURLCredentialPersistenceSynchronizable
} NSURLCredentialPersistence;
这些常数指定了证书保留的时间。
在iOS中,凭据存储在应用程序的钥匙串中,只能由该应用程序访问(和同一个钥匙串访问组中的其他应用程序)。
在macOS中,凭据存储在用户的钥匙串中。 凭证的初始访问控制列表(ACL)仅允许该应用访问。 但是,其他应用程序可以看到给定的主机,端口和领域组合存在密码,并且可以请求用户授予使用该凭证的权限。
NSURLCredentialPersistence | explain |
---|---|
NSURLCredentialPersistenceNone | 证书不应该被存储 |
NSURLCredentialPersistenceForSession | 证书只存在指定的session中 |
NSURLCredentialPersistencePermanent | 证书存储在keychain中 |
NSURLCredentialPersistenceSynchronizable | 证书应该永久存储在钥匙串中,另外应该根据拥有的AppleID分发给其他设备。 |
网友评论