当前位置: 首页 > 知识库问答 >
问题:

Swift 4-Alamofire-认证NTLM使用无效凭据

祁柏
2023-03-14

我有一个问题与身份验证NTLM credenitals,当我使用有效的凭据,它的作品,但当我使用无效的凭据它不会失败,它的作品一样,因为它会与有效的凭据。只有当我首先输入有效凭据时才会出现这种情况。有没有办法清除凭据,或者我在这里做错了什么?这是我的代码:

func loginUser(_ username: String, password: String, completion: @escaping (_ result: Bool) -> Void)
    {

        let user = username

        let password = password

        let url = webservice

        let credential = URLCredential(user: user, password: password, persistence: .none)

        let headers = ["Accept": "application/json;odata=verbose", "Content-type": "application/json;odata=verbose"]

        Alamofire.request(url, method: .get, headers: headers).authenticate(usingCredential: credential).responseJSON {
                (response) in

                print(response.result)

                switch response.result {

                case .success:
                    if let value = response.result.value {

                        completion(true)

                    }else{

                        print("There is error in the server response")

                        completion(false)
                    }

                case .failure (let error):

                    print("The NTLM request error is: ", error.localizedDescription)

                    completion(false)

                }

            }

    }

我注意到一件事,如果我输入有效的文件夹,然后等待几分钟,输入无效的文件,它会像预期的那样工作。

更新

我已经更新了我的代码,这样:

func loginUser(_ username: String, password: String, completion: @escaping (_ result: Bool) -> Void)
    {

        let user = username

        let password = password

        let url = webservice

        let credential = URLCredential(user: user, password: password, persistence: .none)

        var urlRequest = URLRequest(url: URL(string: url)!)

        urlRequest.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData

        urlRequest.httpMethod = "get"

        urlRequest.setValue("application/json;odata=verbose", forHTTPHeaderField: "Content-type")

        urlRequest.setValue("application/json;odata=verbose", forHTTPHeaderField: "Accept")

        Alamofire.request(urlRequest).authenticate(usingCredential: credential).responseJSON {
                (response) in

                switch response.result {

                case .success:
                    if let value = response.result.value {


                       completion(true)

                    }else{

                        print("There is error in the server response")

                        completion(false)
                    }

                case .failure (let error):

                    print("The NTLM request error is: ", error.localizedDescription)

                    completion(false)

                }

            }

    }

添加缓存策略,但仍然得到相同的结果:(

共有1个答案

姚韬
2023-03-14

不返回HTTP错误的失败。您需要查看HTTP响应中的。成功案例中的响应代码,该代码指示授权失败。

请看这里:Swift-Alamofire:如何获取HTTP响应状态代码,以便执行此操作。

或者你可能会碰到缓存。请参阅:如何在Alamofire中禁用缓存

 类似资料:
  • 它说要使用以下命令: 在Google Shell中,我尝试了以下操作: 我知道命令指向的是正确的文件位置。如何成功验证应用程序默认凭据?

  • 问题内容: 我希望在允许用户更改其登录信息之前重新对其进行身份验证。但是,由于最近的Firebase更新,我发现文档没有帮助。使用此链接,我产生了以下authenticateUser()函数。 但是,我不确定如何使用FIRAuthCredential类型的凭证变量来重新认证用户。此类的文档可在此处找到。 问题答案: 获取对象取决于要用于重新认证的提供程序。 电子邮件: 脸书: 推特: 谷歌:

  • 在下面的代码中,我尝试了两种组合 用户(请参阅附图),密码 访问ID和访问密钥 两人都犯了同样的错误。我在家庭网络的eclipse环境中运行了这段代码。 错误 代码

  • Facebook登录没问题,但Firebase无法获取Facebook帐户详细信息。 我已经检查了firebase网站中无效的_凭据意味着什么 一旦我构建,它就会显示: 登录了 登录失败。Error Domain=FirebaseAuthentication Code=-11“(错误代码:INVALID_凭据)提供的验证凭据无效。”UserInfo={details={“providerError

  • 我试图与谷歌云存储使用凭证令牌进行身份验证。在node.jsGCS api文档中找不到关于如何做到这一点的示例。它们指示生成并下载包含私钥的json文件,然后链接到文件系统上的路径,如下所示: 这个很好用。 然而,我不想将我的密钥保存为JSON文件,而是创建凭据并将其保存为环境变量: 我尝试使用服务号HMAC访问密钥从桶的设置、互操作性菜单中获取此令牌。 当我尝试使用上面的身份验证方法从bucke

  • 这是代码,我正在重复错误401:身份验证错误