Credstore Perform Query Error

CredStore Perform Query error

This error occurs when trying to retrieve an URLCredential from URLCredentialStorage for an unknown URLProtectionSpace.
e.g.

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

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

produces

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

Give it a credential for the protection space:

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

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

and the error goes away next time you try to retrieve the credential.

I am a little lost as I am not sure what is causing this, or what
CredStore even does. What purpose does CredStore serve in iOS?

Credential storage on iOS allows users to securely store certificate-based or password-based credentials on the device either temporarily or permanently to the keychain.

I suspect that you have some sort of authentication on your backend server and that server is requesting an authentication challenge to your app (for which no credential exists).

It can probably be safely ignored as returning nil from the URLCredentialStorage is a valid response

Error copying matching creds -- Swift (REST API call)

This solution worked for me. This is how I called a REST API that required a username and password. For those wondering, I put this code inside my IBAction button and didn't have to do anything else other than making the button.

let username = "admin"
let password = "admin"
let loginData = String(format: "%@:%@", username, password).data(using: String.Encoding.utf8)!
let base64LoginData = loginData.base64EncodedString()

// create the request
let url = URL(string: "http:/rest/nodes/ZW002_1/cmd/DFON")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Basic \(base64LoginData)", forHTTPHeaderField: "Authorization")

//making the request
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print("\(error)")
return
}

if let httpStatus = response as? HTTPURLResponse {
// check status code returned by the http server
print("status code = \(httpStatus.statusCode)")
// process result
}
}
task.resume()

********* EXTRA NOTE *************

If yours does not have a username and password and you are trying to call a REST API call in swift here is some code that can help you! BOTH ARE GET REQUESTS!

@IBAction func onGetTapped(_ sender: Any) {

guard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else { return }

// create URL session ~ defaulted to GET

let session = URLSession.shared

session.dataTask(with: url) { (data, response, error) in

// optional chaining to make sure value is inside returnables and not not

if let response = response {
print(response)
}

if let data = data {

// assuming the data coming back is Json -> transform bytes into readable json data

do {

let json = try JSONSerialization.jsonObject(with: data, options: [])

print(json)

} catch {

print("error")
}
}

}.resume() // if this is not called this block of code isnt executed

}


Related Topics



Leave a reply



Submit