Как использовать сертификат SCEP, предоставляемый Intune для MTL в приложении iOS с использованием URLSessionDelegate?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать сертификат SCEP, предоставляемый Intune для MTL в приложении iOS с использованием URLSessionDelegate?

Сообщение Anonymous »

Я работаю над реализацией аутентификации 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»