Skip to content

Commit e7819b5

Browse files
committed
Support NTLM for authentication
1 parent d83d021 commit e7819b5

File tree

5 files changed

+49
-2
lines changed

5 files changed

+49
-2
lines changed

packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 3.16.0
2+
3+
* Support NTLM for authentication
4+
15
## 3.15.0
26

37
* Adds macOS support.

packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,9 @@ class NSUrlAuthenticationMethod {
505505

506506
/// Use HTTP digest authentication for this protection space.
507507
static const String httpDigest = 'NSURLAuthenticationMethodHTTPDigest';
508+
509+
/// Use NTLM authentication for this protection space.
510+
static const String httpNtlm = 'NSURLAuthenticationMethodNTLM';
508511
}
509512

510513
/// A challenge from a server requiring authentication from the client.

packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1147,7 +1147,9 @@ class WebKitNavigationDelegate extends PlatformNavigationDelegate {
11471147
) completionHandler,
11481148
) {
11491149
if (challenge.protectionSpace.authenticationMethod ==
1150-
NSUrlAuthenticationMethod.httpBasic) {
1150+
NSUrlAuthenticationMethod.httpBasic ||
1151+
challenge.protectionSpace.authenticationMethod ==
1152+
NSUrlAuthenticationMethod.httpNtlm) {
11511153
final void Function(HttpAuthRequest)? callback =
11521154
weakThis.target?._onHttpAuthRequest;
11531155
final String? host = challenge.protectionSpace.host;

packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: webview_flutter_wkwebview
22
description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control.
33
repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
5-
version: 3.15.0
5+
version: 3.16.0
66

77
environment:
88
sdk: ^3.5.0

packages/webview_flutter/webview_flutter_wkwebview/test/webkit_navigation_delegate_test.dart

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,44 @@ void main() {
309309
expect(callbackHost, expectedHost);
310310
expect(callbackRealm, expectedRealm);
311311
});
312+
313+
test('onHttpNtlmAuthRequest emits host and realm', () {
314+
final WebKitNavigationDelegate iosNavigationDelegate =
315+
WebKitNavigationDelegate(
316+
const WebKitNavigationDelegateCreationParams(
317+
webKitProxy: WebKitProxy(
318+
createNavigationDelegate: CapturingNavigationDelegate.new,
319+
),
320+
),
321+
);
322+
323+
String? callbackHost;
324+
String? callbackRealm;
325+
326+
iosNavigationDelegate.setOnHttpAuthRequest((HttpAuthRequest request) {
327+
callbackHost = request.host;
328+
callbackRealm = request.realm;
329+
});
330+
331+
const String expectedHost = 'expectedHost';
332+
const String expectedRealm = 'expectedRealm';
333+
334+
CapturingNavigationDelegate
335+
.lastCreatedDelegate.didReceiveAuthenticationChallenge!(
336+
WKWebViewIOS.detached(),
337+
NSUrlAuthenticationChallenge.detached(
338+
protectionSpace: NSUrlProtectionSpace.detached(
339+
host: expectedHost,
340+
realm: expectedRealm,
341+
authenticationMethod: NSUrlAuthenticationMethod.httpNtlm,
342+
),
343+
),
344+
(NSUrlSessionAuthChallengeDisposition disposition,
345+
NSUrlCredential? credential) {});
346+
347+
expect(callbackHost, expectedHost);
348+
expect(callbackRealm, expectedRealm);
349+
});
312350
});
313351
}
314352

0 commit comments

Comments
 (0)