Ich habe diese Klasse hier und innerhalb der Klasse ist eine Methode, und ich versuche, eine NSURLSession auf einer API, die Windows-Authentifizierung Benutzername und Passwort benötigt. Ich habe das Tutorial hier gefolgt https://gist.github.com/n8armstrong/5c5c828f1b82b0315e24Swift - NSURLSession für Windows-Authentifizierung
und kam mit dieser:
let webservice = "https://api.com"
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let urlSession = NSURLSession(configuration: config)
class WebService: NSObject {
func loginUser(username: String, password: String) -> Bool {
let userPasswordString = "[email protected]:Password"
let userPasswordData = userPasswordString.dataUsingEncoding(NSUTF8StringEncoding)
let base64EncodedCredential = userPasswordData!.base64EncodedStringWithOptions([])
let authString = "Basic \(base64EncodedCredential)"
config.HTTPAdditionalHeaders = ["Authorization" : authString]
let requestString = NSString(format:"%@", webservice) as String
let url: NSURL! = NSURL(string: requestString)
let task = urlSession.dataTaskWithURL(url) {
(let data, let response, let error) in
if (response as? NSHTTPURLResponse) != nil {
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print(dataString)
}
}
task.resume()
return true
}
}
aber wenn ich diese laufen bekomme ich einen 401-Fehler: 401 - nicht autorisiert: Zugriff aufgrund ungültiger Anmeldeinformationen verweigert.
Ich habe bestätigt, dass die URL der API korrekt ist. Gleiches gilt für den Benutzernamen und das Passwort. Was mache ich falsch?
Rechts. Sie sollten es vermeiden, den Authorization-Header zu überschreiben, da NSURLSession sich das Recht vorbehält, darauf zu stampfen. In einigen Fällen können Sie dies umgehen, indem Sie X-Authorization oder Ähnliches verwenden, je nachdem, was der Service unterstützt, aber die richtige Art, Basisauthentifizierung durchzuführen, besteht darin, den Berechtigungsnachweis zu erstellen und ihn vom OS so behandeln zu lassen. – dgatwood