Я реализовал в своем приложении Enterprise SSO на основе MSAL, но я столкнулся с проблемой обновления токенов. Чтобы проверить запрос в API, я использую Idtoken, который я получаю после разрешения. Его жизнь составляет приблизительно 1 час. Для входа в систему я использую вызов < /p>
func signIn(completion: @escaping (Result) -> Void) {
guard let applicationContext = applicationContext else { return }
guard let rootVC = UIApplication.shared.windows.first?.rootViewController else {
completion(.failure(NSError(domain: "MSAL", code: -2, userInfo: [NSLocalizedDescriptionKey: "No rootViewController"])))
return
}
let webViewParameters = MSALWebviewParameters(authPresentationViewController: rootVC)
let parameters = MSALInteractiveTokenParameters(scopes: ["user.read"], webviewParameters: webViewParameters)
applicationContext.acquireToken(with: parameters) { result, error in
if let error = error {
completion(.failure(error))
return
}
guard let result = result else {
completion(.failure(NSError(domain: "MSAL", code: -1, userInfo: [NSLocalizedDescriptionKey: "No result"])))
return
}
self.isLoggedWithMSAL = true
if let identifier = result.account.identifier {
CommonService.setMSALAccountIdentifier(identifier: identifier)
}
completion(.success(result))
}
}
< /code>
И это не вызывает проблем
, но позже мне нужно обновить этот токен (например, за 5 минут до истечения срока действия и когда я получил ошибку от API, что мой токен недействителен) - я вызываю < /p>
func getMSALAuthToken(completion: @escaping (String?) -> Void) {
guard let applicationContext = applicationContext else {
SGuardLog.e("MSAL context is not initialized")
completion(nil)
return
}
let parameters = MSALParameters()
parameters.completionBlockQueue = DispatchQueue.main
applicationContext.getCurrentAccount(with: parameters) { currentAccount, _, error in
if let error = error {
SGuardLog.e("Failed to get accounts: \(error)")
completion(nil)
return
}
guard let currentAccount = currentAccount, currentAccount.identifier == CommonService.getMSALAccountIdentifier() else {
SGuardLog.e("No matching account found")
completion(nil)
return
}
let silentParams = MSALSilentTokenParameters(scopes: ["user.read"], account: currentAccount)
applicationContext.acquireTokenSilent(with: silentParams) { result, error in
if let result = result {
completion(result.idToken)
} else {
SGuardLog.e("Silent token refresh failed: \(error?.localizedDescription ?? "Unknown error")")
completion(nil)
}
}
}
}
< /code>
Но в этом случае я получаю тот же токен с истекшим сроком действия (я анализировал его в jwt io и проверил его). Скорее всего, проблема заключается в прицеле, которые я использую. Я обнаружил, что для обновления токена
я предоставил разрешение на его разрешение в конфигурации Azure, добавив его в качестве параметра, но в результате я дал разрешение на него в конфигурации Azure, но в результате я даже не могу войти и получить ошибку. (MSAlerRordomain ошибка -50000.)
Какие конкретные области и разрешения должны быть настроены, чтобы иметь возможность обновлять токен для SSO?
Я реализовал в своем приложении Enterprise SSO на основе MSAL, но я столкнулся с проблемой обновления токенов. Чтобы проверить запрос в API, я использую Idtoken, который я получаю после разрешения. Его жизнь составляет приблизительно 1 час. Для входа в систему я использую вызов < /p> [code] func signIn(completion: @escaping (Result) -> Void) { guard let applicationContext = applicationContext else { return }
guard let rootVC = UIApplication.shared.windows.first?.rootViewController else { completion(.failure(NSError(domain: "MSAL", code: -2, userInfo: [NSLocalizedDescriptionKey: "No rootViewController"]))) return }
let webViewParameters = MSALWebviewParameters(authPresentationViewController: rootVC) let parameters = MSALInteractiveTokenParameters(scopes: ["user.read"], webviewParameters: webViewParameters)
applicationContext.acquireToken(with: parameters) { result, error in if let error = error { completion(.failure(error)) return }
guard let result = result else { completion(.failure(NSError(domain: "MSAL", code: -1, userInfo: [NSLocalizedDescriptionKey: "No result"]))) return }
self.isLoggedWithMSAL = true if let identifier = result.account.identifier { CommonService.setMSALAccountIdentifier(identifier: identifier) } completion(.success(result)) } } < /code> И это не вызывает проблем , но позже мне нужно обновить этот токен (например, за 5 минут до истечения срока действия и когда я получил ошибку от API, что мой токен недействителен) - я вызываю < /p> func getMSALAuthToken(completion: @escaping (String?) -> Void) { guard let applicationContext = applicationContext else { SGuardLog.e("MSAL context is not initialized") completion(nil) return }
let parameters = MSALParameters() parameters.completionBlockQueue = DispatchQueue.main
applicationContext.getCurrentAccount(with: parameters) { currentAccount, _, error in if let error = error { SGuardLog.e("Failed to get accounts: \(error)") completion(nil) return }
let silentParams = MSALSilentTokenParameters(scopes: ["user.read"], account: currentAccount)
applicationContext.acquireTokenSilent(with: silentParams) { result, error in if let result = result { completion(result.idToken) } else { SGuardLog.e("Silent token refresh failed: \(error?.localizedDescription ?? "Unknown error")") completion(nil) } } } } < /code> Но в этом случае я получаю тот же токен с истекшим сроком действия (я анализировал его в jwt io и проверил его). Скорее всего, проблема заключается в прицеле, которые я использую. Я обнаружил, что для обновления токена я предоставил разрешение на его разрешение в конфигурации Azure, добавив его в качестве параметра, но в результате я дал разрешение на него в конфигурации Azure, но в результате я даже не могу войти и получить ошибку. (MSAlerRordomain ошибка -50000.) [/code] Какие конкретные области и разрешения должны быть настроены, чтобы иметь возможность обновлять токен для SSO?
Я реализовал в своем приложении Enterprise SSO на основе MSAL, но я столкнулся с проблемой обновления токенов. Чтобы проверить запрос в API, я использую Idtoken, который я получаю после разрешения. Его жизнь составляет приблизительно 1 час. Для...
Я реализовал в своем приложении Enterprise SSO на основе MSAL, но я столкнулся с проблемой обновления токенов. Чтобы проверить запрос в API, я использую Idtoken, который я получаю после разрешения. Его жизнь составляет приблизительно 1 час. Для...
Я работаю с большими наборами данных, хранящимися в файлах Parquet, и мне нужно выполнить операцию обновления (обновления + вставки) с помощью Polars. Если файлы вырастут до пары ГБ, возникнут проблемы с памятью, и операция обновления завершится...
Я работаю с большими наборами данных, хранящимися в файлах Parquet, и мне нужно выполнить операцию обновления (обновления + вставки) с помощью Polars. Если файлы вырастут до пары ГБ, возникнут проблемы с памятью, и операция обновления завершится...
Я сделал инструмент HTML, работающий локально для автоматического запуска URL или множества URL-адресов после секунд/минут/часов или конкретной даты, основанной на предварительно запланированном списке. Я думаю, что проблема возникает в результате...