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 に対してテストしたところ、問題なく動作しました。