0

AppAuth-iOS の例 ( https://github.com/openid/AppAuth-iOS ) と Okta OAuth サンプル ( https://github.com/oktadeveloper/okta-openidconnect )に大まかに基づいたシンプルな iOS Swift アプリがあります。 -appauth-ios )。Service Discovery も自動トークン取得も使用していません (つまり、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 に対してテストしたところ、問題なく動作しました。

4

1 に答える 1