OAuth2 icon indicating copy to clipboard operation
OAuth2 copied to clipboard

useAuthenticationSession = true not launching an ASWebAuthenticationSession

Open dnsco opened this issue 5 years ago • 2 comments

I've got the following code, but it's launching a safari window instead of an ASWebAuthenticationSession.

I'm not sure if this is because I'm using SwiftUI?

This could be user error, but it wasn't clear from the docs.

let oauth2 = OAuth2CodeGrant(settings: [
  //...
] as OAuth2JSON)

oauth2.logger = OAuth2DebugLogger(.trace)
oauth2.authConfig.ui.useAuthenticationSession = true

oauth2.authorize() {(json, err) in
 //...
}

If I set:

oauth2.authConfig.authorizeEmbedded = true

I get:

2021-02-06 04:02:47.060157-0700 better[2680:60843] Fatal error: Invalid authConfig.authorizeContext, must be a UIViewController but is nil: file iOS/OAuth2Authorizer+iOS.swift, line 328

dnsco avatar Feb 06 '21 10:02 dnsco

If authorizeEmbedded is not set, it will open Safari and doesn't recognize the useAuthenticationSession Setting. So to use you must set

oauth2.authConfig.authorizeEmbedded = true

The Fatal Error is there because of the missing context. But the current version (5.3.1) doesn't work with SwiftUI, because the type of the presentation context was changed. So for a quick fix use version 5.3.0. With this version the ASWebAuthenticationSession opens as expected.

Create an ASPresentationAnchor:

let presentationAnchor = ASPresentationAnchor()

Then set it as context for for the OAuth library:

let oauth2 = OAuth2CodeGrant(settings: [
  //...
] as OAuth2JSON)

oauth2.logger = OAuth2DebugLogger(.trace)
oauth2.authConfig.authorizeContext = presentationAnchor
oauth2.authConfig.authorizeEmbedded = true
oauth2.authConfig.ui.useAuthenticationSession = true

oauth2.authorize() {(json, err) in
 //...
}

longinius avatar Feb 20 '21 08:02 longinius

For me, it's working with 5.3.1. I'm using:

oauth2.logger = OAuth2DebugLogger(.trace)
oauth2.authConfig.ui.useAuthenticationSession = true
oauth2.authConfig.authorizeEmbedded = true
oauth2.authConfig.authorizeContext = UIApplication.shared.windows.first!.rootViewController!`

svencorell avatar Jun 17 '21 12:06 svencorell