116 votes

Erreur de CredStore Perform Query

Je rencontre un problème lorsque je fais des appels d'API vers le backend de mes applications, chaque connexion donne lieu à un message d'alerte avec la mention

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 la cause de ce problème, ni même de ce que fait CredStore. À quoi sert CredStore dans iOS ?

39voto

Brett Points 946

Cette erreur se produit lorsque l'on essaie de récupérer un URLCredential 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 une accréditation 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 l'identifiant.

Je suis un peu perdu car je ne suis pas sûr de la cause de ce problème ou de ce que fait CredStore. CredStore. À quoi sert CredStore dans iOS ?

Le stockage d'informations d'identification sur iOS permet aux utilisateurs de stocker de manière sécurisée des informations d'identification basées sur des certificats ou des mots de passe sur l'appareil, de manière temporaire ou permanente, dans le trousseau.

Je soupçonne que vous avez une sorte d'authentification sur votre serveur dorsal et que ce serveur demande un défi d'authentification à votre application (pour laquelle il n'existe pas d'identifiant).

Il peut probablement être ignoré en toute sécurité car il renvoie nil de la fonction URLCredentialStorage est une réponse valide

14voto

Gleb Tarasov Points 467

Je ne suis pas sûr de la raison pour laquelle nous obtenons cette erreur lorsque nous effectuons des requêtes avec Alamofire, mais si vous effectuez des requêtes API avec un jeton dans les en-têtes HTTP, vous n'avez peut-être pas besoin de stocker les informations d'identification. Nous pouvons donc le désactiver pour notre requête :

let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = ourHeaders
// disable default credential store
configuration.urlCredentialStorage = nil

let manager = Alamofire.SessionManager(configuration: configuration)
...

Aucune erreur après ce changement.

4voto

tuan nguyen Points 125

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

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

Soyez prudent. car cela permet de se connecter à n'importe quel serveur depuis votre application. Lisez plus sur App Transport Security avant de continuer. Voir le commentaire de @kezi

2voto

Andrey Agapov Points 29

Si vous obtenez cette erreur, lorsque vous utilisez AVPlayer, il suffit d'appeler .play() sur le fil principal.

2voto

Pavlos Points 609

J'ai modifié la chaîne qui contient l'URL pour corriger ce problème :

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

let url = URL(string: myUrl)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X