首页 > 解决方案 > 如何从多个凭据中获取特定的用户凭据以用于保护空间

问题描述

我在一项任务中制作了包含 2 个分别使用领域“REALM1”和“REALM2”的基本身份验证的 rest API。每次我们访问 API 时,我们都需要为各自的 REALM 输入身份验证。我们希望 URLSession 使用这个 api 从服务器获取数据。但是当我们调用这个 API 时,第一个 func urlSession(URLSession, task: URLSessionTask, didReceive: URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) 方法是为 REALM1 调用的。使用指定的保护空间调用完成处理程序。但是对于 REALM2 func urlSession(URLSession, task: URLSessionTask, didReceive: URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) 方法不会被调用。而是将 REALM1 凭据发送到 REALM2 的服务器。发生这种情况是因为在 url 会话配置中,url credential store 属性默认不是 nil,并且 url credential persistent property 是永久的。因此,如果我们将 url session 配置中的 url credential store 属性设置为 nil,并将 url credential 中的 persistent 属性设置为 none。然后func urlSession(URLSession, task: URLSessionTask, didReceive: URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void)每个任务相关的挑战都会调用方法,例如 NSURLAuthenticationMethodHTTPBasic 等。我在 REALM2 中有多个用户,他们的凭据存在于钥匙串中,然后如何为钥匙串中的 REALM2 选择特定用户的凭据。

标签: swiftkeychainurlsession

解决方案


推荐阅读