diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 69efda2..ba407a6 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -28,4 +28,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: fe5e039928e08cc3aa55730590fe5577354d32d2 -COCOAPODS: 1.11.3 +COCOAPODS: 1.14.3 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index df4f09d..e20c4ce 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -157,7 +157,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -206,6 +206,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 3db53b6..b52b2e6 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - + + + - + + @@ -14,13 +16,14 @@ - + - + + diff --git a/example/lib/main.dart b/example/lib/main.dart index c21d72c..f6d7b5a 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -75,7 +75,7 @@ class _MyAppState extends State { Future intPca() async { var _redirectUri = Platform.isIOS ? null : _redirectUriMacos; return await AzureAdAuthentication.createPublicClientApplication( - clientId: _clientId, authority: _authority, redirectUri: _redirectUri,); + clientId: _clientId, authority: _authority, redirectUri: _redirectUri, privateSession: false, webViewType: WebViewType.safari); } Future _logout() async { diff --git a/example/pubspec.lock b/example/pubspec.lock index 03280f9..e58a08f 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" azure_ad_authentication: dependency: "direct main" description: @@ -28,10 +28,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" clock: dependency: transitive description: @@ -44,10 +44,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.2" fake_async: dependency: transitive description: @@ -74,14 +74,6 @@ packages: description: flutter source: sdk version: "0.0.0" - js: - dependency: transitive - description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" - source: hosted - version: "0.6.5" lints: dependency: transitive description: @@ -94,34 +86,34 @@ packages: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" sky_engine: dependency: transitive description: flutter @@ -131,10 +123,10 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -171,10 +163,10 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.6.0" vector_math: dependency: transitive description: @@ -183,6 +175,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" sdks: - dart: ">=2.18.0 <3.0.0" + dart: ">=3.1.0-185.0.dev <4.0.0" flutter: ">=1.20.0" diff --git a/ios/Classes/SwiftAzureAdAuthenticationPlugin.swift b/ios/Classes/SwiftAzureAdAuthenticationPlugin.swift index 47c8dc9..211acd6 100644 --- a/ios/Classes/SwiftAzureAdAuthenticationPlugin.swift +++ b/ios/Classes/SwiftAzureAdAuthenticationPlugin.swift @@ -8,6 +8,8 @@ public class SwiftAzureAdAuthenticationPlugin: NSObject, FlutterPlugin { static var clientId : String = "" static var authority : String = "" static var redirectUri: String?; + static var privateSession: Bool = true; + static var webViewType: String = ""; static let kCurrentAccountIdentifier = "MSALCurrentAccountIdentifier" @@ -27,9 +29,11 @@ public class SwiftAzureAdAuthenticationPlugin: NSObject, FlutterPlugin { let clientId = dict["clientId"] as? String ?? "" let authority = dict["authority"] as? String ?? "" let redirectUri = dict["redirectUri"] as? String ?? nil + let privateSession = dict["privateSession"] as? Bool ?? true + let webViewType = dict["webViewType"] as? String ?? "default" switch( call.method ){ - case "initialize": initialize(clientId: clientId, authority: authority, redirectUri: redirectUri, result: result) + case "initialize": initialize(clientId: clientId, authority: authority, redirectUri: redirectUri,privateSession: privateSession,webViewType: webViewType ,result: result) case "acquireToken": acquireToken(scopes: scopes, result: result) case "acquireTokenSilent": acquireTokenSilent(scopes: scopes, result: result) case "logout": logout(result: result) @@ -57,7 +61,7 @@ public class SwiftAzureAdAuthenticationPlugin: NSObject, FlutterPlugin { return nil } - private func initialize(clientId: String, authority: String,redirectUri: String?, result: @escaping FlutterResult) + private func initialize(clientId: String, authority: String,redirectUri: String?, privateSession: Bool, webViewType: String, result: @escaping FlutterResult) { //validate clientid exists if(clientId.isEmpty){ @@ -68,6 +72,8 @@ public class SwiftAzureAdAuthenticationPlugin: NSObject, FlutterPlugin { SwiftAzureAdAuthenticationPlugin.clientId = clientId; SwiftAzureAdAuthenticationPlugin.authority = authority; SwiftAzureAdAuthenticationPlugin.redirectUri = redirectUri; + SwiftAzureAdAuthenticationPlugin.privateSession = privateSession; + SwiftAzureAdAuthenticationPlugin.webViewType = webViewType; result(true) } @@ -84,8 +90,19 @@ extension SwiftAzureAdAuthenticationPlugin { // let viewController: UIViewController = UIApplication.shared.keyWindow!.rootViewController! let viewController: UIViewController = UIViewController.keyViewController! let webviewParameters = MSALWebviewParameters(authPresentationViewController: viewController) + if #available(iOS 13.0, *) { - webviewParameters.prefersEphemeralWebBrowserSession = true + webviewParameters.prefersEphemeralWebBrowserSession = SwiftAzureAdAuthenticationPlugin.privateSession + } + switch (SwiftAzureAdAuthenticationPlugin.webViewType) { + case "safari": + webviewParameters.webviewType = MSALWebviewType.safariViewController + case "webView": + webviewParameters.webviewType = MSALWebviewType.wkWebView + case "authenticationSession": + webviewParameters.webviewType = MSALWebviewType.authenticationSession + default: + webviewParameters.webviewType = MSALWebviewType.default } removeAccount(application) diff --git a/lib/azure_ad_authentication.dart b/lib/azure_ad_authentication.dart index fbba9dd..c63d6e1 100644 --- a/lib/azure_ad_authentication.dart +++ b/lib/azure_ad_authentication.dart @@ -8,19 +8,32 @@ import 'exeption.dart'; import 'model/request.dart'; import 'model/user_ad.dart'; +enum WebViewType { + safari, + webView, + authenticationSession, +} + class AzureAdAuthentication { static const MethodChannel _channel = MethodChannel('azure_ad_authentication'); late String? _clientId, _authority, _redirectUri; + bool? _privateSession; + WebViewType? _webViewType; AzureAdAuthentication._create({ required String clientId, required String authority, String? redirectUri, + bool privateSession = true, + WebViewType? webViewType = WebViewType.webView, + }) { _clientId = clientId; _authority = authority; _redirectUri = redirectUri; + _privateSession = privateSession; + _webViewType = webViewType; } ///initialize client application @@ -31,9 +44,9 @@ class AzureAdAuthentication { /// return AzureAdAuthentication /// ``` static Future createPublicClientApplication( - {required String clientId, required String authority, String? redirectUri}) async { + {required String clientId, required String authority, String? redirectUri, bool privateSession = true, WebViewType? webViewType}) async { var res = - AzureAdAuthentication._create(clientId: clientId, authority: authority,redirectUri: redirectUri); + AzureAdAuthentication._create(clientId: clientId, authority: authority,redirectUri: redirectUri, privateSession: privateSession, webViewType: webViewType); await res._initialize(); return res; @@ -142,6 +155,8 @@ class AzureAdAuthentication { if(_redirectUri != null){ res["redirectUri"] = _redirectUri; } + res['privateSession'] = _privateSession; + res['webViewType'] = _webViewType?.name; try { await _channel.invokeMethod('initialize', res); diff --git a/pubspec.yaml b/pubspec.yaml index 58be7da..63edf02 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,7 +7,7 @@ repository: https://github.com/fabio21/azure_ad_authentication/issues issue_tracker: https://github.com/fabio21/azure_ad_authentication/issues environment: - sdk: ">=2.12.0 <3.0.0" + sdk: ">=2.15.0 <3.0.0" flutter: ">=1.20.0" dependencies: