Я работаю над реализацией аутентификации MTLS в моем приложении для iOS.
Сертификат клиента SCEP развертывается на устройстве через Intune mdm .
Когда я пытаюсь получить доступ к защищенной конечной точке через sfsafarivevecontroler/assweauthentsection , и Sfice -PickateRessionSessionSessionSessionSessionSisessionSisessionSisessionS. Успех.
Однако из моего приложения (используя UrlSessionDelegate < /code>), сертификат не найден. /> Как я могу сделать свой доступ к приложению для iOS и использовать сертификат SCEP (установлен через Intune) для запросов MTLS? class = "Lang-Swift PrettyPrint-Override">final class KeychainCertificateDelegate: NSObject, URLSessionDelegate {
func urlSession(_ session: URLSession,
didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
guard challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodClientCertificate else {
completionHandler(.performDefaultHandling, nil)
return
}
// Get the DNs the server will accept
guard let expectedDNs = challenge.protectionSpace.distinguishedNames else {
completionHandler(.cancelAuthenticationChallenge, nil)
return
}
var identityRefs: CFTypeRef? = nil
let err = SecItemCopyMatching([
kSecClass: kSecClassIdentity,
kSecMatchLimit: kSecMatchLimitAll,
kSecMatchIssuers: expectedDNs,
kSecReturnRef: true,
] as NSDictionary, &identityRefs)
if err != errSecSuccess {
completionHandler(.cancelAuthenticationChallenge, nil)
return
}
guard let identities = identityRefs as? [SecIdentity],
let identity = identities.first
else {
print("Identity list is empty")
completionHandler(.cancelAuthenticationChallenge, nil)
return
}
let credential = URLCredential(identity: identity, certificates: nil, persistence: .forSession)
completionHandler(.useCredential, credential)
}
}
func perform_mTLSRequest() {
guard let url = URL(string: "https://sample.com/api/endpoint") else {
return
}
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.setValue("Bearer \(bearerToken)", forHTTPHeaderField: "Authorization")
let delegate = KeychainCertificateDelegate()
let session = URLSession(configuration: .ephemeral, delegate: delegate, delegateQueue: nil)
let task = session.dataTask(with: request) { data, response, error in
guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else {
print("Bad response")
return
}
if let data = data {
print(String(data: data, encoding: .utf8)!)
}
}
task.resume()
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-urlses
Как использовать сертификат SCEP, предоставляемый Intune для MTL в приложении iOS с использованием URLSessionDelegate? ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
URLSession реализует URLSessionDelegate для обхода любой проверки сертификата
Гость » » в форуме IOS - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Гость
-
-
-
Как экспортировать OBJ с текстурой (JPG + MTL) из сканирования Arkit LiDAR в iOS?
Anonymous » » в форуме IOS - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-