Аутентификация с помощью ADAL - проблема с выходом из системы - PullRequest
0 голосов
/ 09 апреля 2019

Я работаю над кодированием приложения IOS в SWIFT 4 и использую инфраструктуру ADAL для аутентификации пользователей. Я настроил проверку подлинности, и все идет хорошо до выхода из системы. Когда я выхожу из приложения, приложение удаляет cookie. При попытке выйти из системы и войти в систему под другим именем Azure AD все еще видит предыдущий файл cookie.

Код функции выхода из системы ниже:

@IBAction func signoutButton(_ sender: Any) {

    displaySelectionController.isHidden = true
    self.signoutButton.isEnabled = false
    self.signoutButton.backgroundColor = #colorLiteral(red: 0.7018831372, green: 0.7020055652, blue: 0.7018753886, alpha: 1)
    connectedLabel.isHidden = true
    connectedTextInfo.isHidden = true
    callGraphButton.isHidden = false
    displaySelectionController.isHidden = true

    let request = NSMutableURLRequest(url: NSURL(string: "https://login.microsoft.com/logout")! as URL)
    request.httpMethod = "GET"

    guard let account = currentAccount()?.userInformation?.userId else {
        self.updateLogging(text: "Didn't find a logged in account in the cache.")
        return
    }

    ADKeychainTokenCache.defaultKeychain().removeAll(forUserId: account, clientId: kClientID, error: nil)

    let cookieJar = HTTPCookieStorage.shared
    guard let cookies = cookieJar.cookies else { return }
    let cookiesArr = Array(cookies)
    for cookie: HTTPCookie in cookiesArr {
        if (cookie.name == "SignInStateCookie" || cookie.name == "ESTSAUTHPERSISTENT" || cookie.name == "ESTSAUTHLIGHT" || cookie.name == "ESTSAUTH" || cookie.name == "ESTSSC") {
            cookieJar.deleteCookie(cookie)
            print("     COOKIE DELETED")
        }
    }

    self.updateLogging(text: "Removed account for: \(account)" )
}

1 Ответ

0 голосов
/ 11 апреля 2019

Я решил свою проблему, изменив способ удаления файлов cookie:

@IBAction func signoutButton(_ sender: Any) {

    displaySelectionController.isHidden = true
    self.signoutButton.isEnabled = false
    self.signoutButton.backgroundColor = #colorLiteral(red: 0.7018831372, green: 0.7020055652, blue: 0.7018753886, alpha: 1)
    connectedLabel.isHidden = true
    connectedTextInfo.isHidden = true
    callGraphButton.isHidden = false
    displaySelectionController.isHidden = true

    ADKeychainTokenCache.defaultKeychain().removeAll(forClientId: kClientID, error: nil)

    _ = HTTPCookie.self
    let cookieJar = HTTPCookieStorage.shared

    for cookie in cookieJar.cookies! {
        cookieJar.deleteCookie(cookie)
    }
}
...