首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CredStore执行查询错误

CredStore执行查询错误
EN

Stack Overflow用户
提问于 2017-09-07 15:17:54
回答 16查看 58.1K关注 0票数 116

我在对我的应用程序后端执行API调用时遇到了一个问题,现在每个连接都会用

代码语言:javascript
复制
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中有什么用途?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2017-10-18 08:39:34

当试图为未知的URLCredentialURLCredentialStorage检索URLProtectionSpace时,会发生此错误。例如:

代码语言:javascript
复制
let protectionSpace = URLProtectionSpace.init(host: host, 
                                              port: port, 
                                              protocol: "http", 
                                              realm: nil, 
                                              authenticationMethod: nil)

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

产生

代码语言:javascript
复制
CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = http;
    "r_Attributes" = 1;
    srvr = host;
    sync = syna;
}

给它一个保护空间的证书:

代码语言:javascript
复制
let userCredential = URLCredential(user: user, 
                                   password: password, 
                                   persistence: .permanent)

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

下次您试图检索凭据时,错误就会消失。

我有点不知所措,因为我不知道是什么导致了这一切,或者CredStore到底做了什么。CredStore在iOS中有什么用途?

iOS上的凭据存储允许用户在设备上临时或永久地将基于证书或基于密码的凭据安全地存储到密钥链。

我怀疑您的后端服务器上有某种身份验证,并且该服务器正在请求对您的应用程序进行身份验证挑战(该应用程序不存在凭据)。

它可能会被安全地忽略,因为从URLCredentialStorage返回的零是一个有效的响应。

票数 39
EN

Stack Overflow用户

发布于 2019-01-08 22:28:37

我不知道为什么在使用Alamofire执行请求时会出现这个错误,但是如果您在HTTP头中使用一些标记来处理API请求,那么您可能根本不需要存储凭据。因此,我们可以根据我们的请求禁用它:

代码语言:javascript
复制
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = ourHeaders
// disable default credential store
configuration.urlCredentialStorage = nil

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

在这样的更改之后没有错误。

票数 14
EN

Stack Overflow用户

发布于 2018-11-07 09:23:27

同样的问题也发生在我身上,我发现如果您的API在URL末尾不包含"/“,那么iOS就不会向服务器发送”授权“值。因此,您将在控制台中看到一条类似于发帖的消息。

因此,只需在URL末尾添加"/“即可。

代码语言:javascript
复制
https://example.com/api/devices/
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46099940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档