我有一个基于 AppAuth-iOS 示例(https://github.com/openid/AppAuth-iOS)和 Okta OAuth 示例(https://github.com/oktadeveloper/okta-openidconnect )的简单 iOS Swift 应用程序-appauth-ios)。我没有使用服务发现,也没有使用自动令牌获取(即不使用 authStateByPresentingAuthorizationRequest)。
我的示例适用于 Azure AD,但不适用于 Okta。我能够登录并通过身份验证并重定向回我的移动应用程序 (AppDelegate.application()),但随后流程不会返回到我的 OIDAuthorizationService.present() 完成块。
这是一些代码:
@IBAction func signInButton(_ sender: Any) {
// select idp
switch selectedIdentityProvider! {
case "Azure AD":
selectedAuthConfig = AzureAdAuthConfig()
case "Okta":
selectedAuthConfig = OktaAuthConfig();
default:
return
}
appAuthAuthorize(authConfig: selectedAuthConfig!)
}
func appAuthAuthorize(authConfig: AuthConfig) {
let serviceConfiguration = OIDServiceConfiguration(
authorizationEndpoint: NSURL(string: authConfig.authEndPoint)! as URL,
tokenEndpoint: NSURL(string: authConfig.tokenEndPoint)! as URL)
let request = OIDAuthorizationRequest(configuration: serviceConfiguration, clientId: authConfig.clientId, scopes: authConfig.scope, redirectURL: NSURL(string: authConfig.redirectUri)! as URL, responseType: OIDResponseTypeCode, additionalParameters: nil)
doAppAuthAuthorization(authRequest: request)
}
func doAppAuthAuthorization(authRequest: OIDAuthorizationRequest) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.currentAuthorizationFlow = OIDAuthorizationService.present(authRequest, presenting: self, callback: {
(authorizationResponse, error) in
if (authorizationResponse != nil) {
self.authState = OIDAuthState(authorizationResponse: authorizationResponse!)
self.logMessage(message: "Got authorization tokens. Access token: \(String(describing: self.authState?.lastAuthorizationResponse.authorizationCode))")
self.doTokenRequest()
} else {
self.authState = nil
self.logMessage(message: "Authorization error: \(String(describing: error?.localizedDescription))")
}
})
}
我可以重写代码以使用 authStateByPresentingAuthorizationRequest() 来查看它是否有效,但有点怀疑,因为此代码适用于 Azure AD。有什么建议么?
更新 1 我忘了提到我有一个工作的 Android/Java 示例,它与相同的 Okta 定义背道而驰,并且像魅力一样工作。
更新 2 我确实重写了代码以针对 Okta 使用authStateByPresentingAuthorizationRequest()并且得到了相同的结果(即在重定向回我的应用程序后卡住了)。我对 Azure AD 进行了测试,它工作正常。