Ошибка выполнения запроса CredStore

я сталкиваюсь с проблемой при выполнении вызовов API для моих приложений, теперь каждое соединение запрашивает

CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
    atyp = http;
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = http;
    "r_Attributes" = 1;
    srvr = "myappsurl.com";
    sync = syna;
}

Я немного потерян, поскольку я не уверен, что вызывает это, или что CredStore даже делает. Какую цель CredStore служит в iOS?

6 ответов


эта ошибка возникает при попытке получить URLCredential С URLCredentialStorage неизвестный URLProtectionSpace. например,

let protectionSpace = URLProtectionSpace.init(host: host, 
                                              port: port, 
                                              protocol: "http", 
                                              realm: nil, 
                                              authenticationMethod: nil)

var credential: URLCredential? = URLCredentialStorage.shared.defaultCredential(for: protectionSpace)

производит

CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = http;
    "r_Attributes" = 1;
    srvr = host;
    sync = syna;
}

дайте ему учетные данные для пространства защиты:

let userCredential = URLCredential(user: user, 
                                   password: password, 
                                   persistence: .permanent)

URLCredentialStorage.shared.setDefaultCredential(userCredential, for: protectionSpace)

и ошибка исчезнет следующий раз, когда вы пытаетесь получить учетные данные.

Я немного потерян, поскольку я не уверен, что вызывает это, или что CredStore даже делает. Какой цели служит CredStore на iOS?

хранение учетных данных в iOS позволяет пользователям безопасно хранить учетные данные на основе сертификатов или паролей на устройстве временно или постоянно в связке ключей.

Я подозреваю, что у вас есть какая-то идентификация на вашем сервере и этот сервер запрашивает проверку подлинности для приложения (для которых нет учетных данных).

его, вероятно, можно безопасно игнорировать как возвращающий ноль из URLCredentialStorage является допустимым ответ


это ошибка транспорта, давайте добавим разрешение транспорта, как это в файле plist:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

будьте осторожны поскольку это позволяет подключаться к любому серверу из вашего приложения. Подробнее о App Transport Security, прежде чем продолжить. См. комментарий @kezi


Если вы получите эту ошибку, при использовании AVPlayer, просто позвоните .play () на главной нити


я отредактировал строку, содержащую URL-адрес, чтобы исправить эту проблему:

var myUrl = "http://myurl.com"
myUrl = myUrl.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)!

let url = URL(string: myUrl)

в моем случае я не инициализировал Stripe SDK с ключом API.

        STPPaymentConfiguration.shared().publishableKey = publishableKey

в случае любой деятельности нашивки, если мы можем напечатать журнал ошибки, то свое легкое для того чтобы понять.

        print(error.debugDescription)

ошибка также может быть вызвана политикой безопасности содержимого (CSP), которая может быть слишком ограничительной. В нашем случае нам нужен CSP, который более или менее полностью открыт и позволяет все. Имейте в виду, что открытие CSP может быть большой проблемой безопасности (в зависимости от того, что именно вы делаете в приложении).