Erreur D'exécution de la requête CredStore

Je rencontre un problème en faisant des appels API à mon backend d'applications, chaque connexion invite maintenant avec

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;
}

Je suis un peu perdu car je ne suis pas sûr de ce qui cause cela, ou de ce que CredStore fait même. À quoi sert CredStore dans iOS?

74
demandé sur Daniel Storm 2017-09-07 18:17:54

6 réponses

Cette erreur se produit lorsque vous essayez de récupérer un URLCredential à partir de URLCredentialStorage pour un inconnu URLProtectionSpace. par exemple

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

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

Produit

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

Donnez-lui des informations d'identification pour l'espace de protection:

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

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

Et l'erreur disparaît la prochaine fois que vous essayez de récupérer les informations d'identification.

Je suis un peu perdu car je ne suis pas sûr de ce qui cause cela, ou quoi CredStore fait même. À quoi sert CredStore dans iOS?

Le stockage des informations d'identification sur iOS permet aux utilisateurs de stockez les informations d'identification basées sur un certificat ou un mot de passe sur le périphérique, temporairement ou définitivement, dans le trousseau.

Je soupçonne que vous avez une sorte d'authentification sur votre serveur principal et que ce serveur demande un défi d'authentification à votre application (pour lequel aucune information d'identification n'existe).

Il peut probablement être ignoré en toute sécurité car renvoyer nil à partir de URLCredentialStorage est une réponse valide

22
répondu Brett 2017-10-18 08:39:34

C'est une erreur de transport, ajoutons l'autorisation de transport comme ceci dans le fichier plist:

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

Soyez prudent car cela permet la connexion à n'importe quel serveur à partir de votre application. En savoir plus sur la sécurité des transports App avant de continuer. Voir le commentaire de @kezi

4
répondu tuan nguyen 2018-03-26 12:35:20

Si vous obtenez cette erreur, lorsque vous utilisez AVPlayer, appelez simplement .play() sur le thread principal

2
répondu Andrey Agapov 2018-07-30 15:56:50

J'ai modifié la chaîne qui contient L'URL pour résoudre ce problème:

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

let url = URL(string: myUrl)
1
répondu Pavlos 2018-01-30 10:32:58

Dans mon cas, je n'initialisais pas le SDK Stripe avec la clé API.

        STPPaymentConfiguration.shared().publishableKey = publishableKey

En cas d'opération de bande, si nous pouvons imprimer le journal des erreurs, c'est facile à comprendre.

        print(error.debugDescription)
0
répondu preetam 2018-07-02 18:33:07

L'erreur peut également être causée par une stratégie de sécurité de contenu (CSP) qui peut être trop restrictive. Dans notre cas, nous avions besoin d'un CSP plus ou moins complètement ouvert et qui permet tout. Gardez à l'esprit que l'ouverture du CSP peut être un grand problème de sécurité (en fonction de ce que vous faites exactement dans l'application).

0
répondu Raphael 2018-08-01 09:32:39