@@ -49,6 +49,9 @@ @interface AXWebViewController ()<NJKWebViewProgressDelegate>
49
49
NSURL *_baseURL;
50
50
#if AX_WEB_VIEW_CONTROLLER_USING_WEBKIT
51
51
WKWebViewConfiguration *_configuration;
52
+
53
+ WKWebViewDidReceiveAuthenticationChallengeHandler _challengeHandler;
54
+ AFSecurityPolicy *_securityPolicy;
52
55
#endif
53
56
54
57
NSURLRequest *_request;
@@ -1096,6 +1099,32 @@ - (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavig
1096
1099
[self didFailLoadWithError: error];
1097
1100
}
1098
1101
- (void )webView : (WKWebView *)webView didReceiveAuthenticationChallenge : (NSURLAuthenticationChallenge *)challenge completionHandler : (void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *__nullable credential))completionHandler {
1102
+ // !!!: Do add the security policy if using a custom credential.
1103
+ NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling ;
1104
+ __block NSURLCredential *credential = nil ;
1105
+
1106
+ if (self.challengeHandler ) {
1107
+ disposition = self.challengeHandler (webView, challenge, &credential);
1108
+ } else {
1109
+ if ([challenge.protectionSpace.authenticationMethod isEqualToString: NSURLAuthenticationMethodServerTrust ]) {
1110
+ if ([self .securityPolicy evaluateServerTrust: challenge.protectionSpace.serverTrust forDomain: challenge.protectionSpace.host]) {
1111
+ credential = [NSURLCredential credentialForTrust: challenge.protectionSpace.serverTrust];
1112
+ if (credential) {
1113
+ disposition = NSURLSessionAuthChallengeUseCredential ;
1114
+ } else {
1115
+ disposition = NSURLSessionAuthChallengePerformDefaultHandling ;
1116
+ }
1117
+ } else {
1118
+ disposition = NSURLSessionAuthChallengePerformDefaultHandling ;
1119
+ }
1120
+ } else {
1121
+ disposition = NSURLSessionAuthChallengePerformDefaultHandling ;
1122
+ }
1123
+ }
1124
+
1125
+ if (completionHandler) {
1126
+ completionHandler (disposition, credential);
1127
+ }
1099
1128
completionHandler (NSURLSessionAuthChallengePerformDefaultHandling , nil );
1100
1129
}
1101
1130
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0
@@ -1523,6 +1552,24 @@ - (void)orientationChanged:(NSNotification *)note {
1523
1552
}
1524
1553
@end
1525
1554
1555
+ @implementation AXWebViewController (Security)
1556
+ - (WKWebViewDidReceiveAuthenticationChallengeHandler)challengeHandler {
1557
+ return _challengeHandler;
1558
+ }
1559
+
1560
+ - (AFSecurityPolicy *)securityPolicy {
1561
+ return _securityPolicy;
1562
+ }
1563
+
1564
+ - (void )setChallengeHandler : (WKWebViewDidReceiveAuthenticationChallengeHandler)challengeHandler {
1565
+ _challengeHandler = [challengeHandler copy ];
1566
+ }
1567
+
1568
+ - (void )setSecurityPolicy : (AFSecurityPolicy *)securityPolicy {
1569
+ _securityPolicy = securityPolicy;
1570
+ }
1571
+ @end
1572
+
1526
1573
#if AX_WEB_VIEW_CONTROLLER_USING_WEBKIT
1527
1574
@implementation UIProgressView (WebKit)
1528
1575
+ (void )load {
0 commit comments