Alamofire 中的基本身份验证标头

Posted

技术标签:

【中文标题】Alamofire 中的基本身份验证标头【英文标题】:Basic auth header in Alamofire 【发布时间】:2017-05-07 16:15:40 【问题描述】:

我有一个受保护的 api,我得到了它的用户名和密码。当我使用 Postman 时,我选择“基本身份验证”类型,并且在正文中我有参数,例如用户登录信息。它工作得很好。

但是,我尝试用 Alamofire 做同样的事情,但我无法获得正确的 JSON 返回。这是我所做的:

  // user auth 
  let param = ["mobile":"3", "password":"100200"]
    let urlStr = "http://MyApi.com/api/login"
    let url = URL(string: urlStr)

    // api auth 
    let user = "apiUserName"
    let password = "ApiAuthPassword"


    var headers: HTTPHeaders = ["mobile":"001",
                                "password":"1111"]

    if let authorizationHeader = Request.authorizationHeader(user: user, password: password) 
        headers[authorizationHeader.key] = authorizationHeader.value
    

    Alamofire.request(url!, headers: headers)
        .responseJSON  response in

            print(response.result.value)
            if let value: AnyObject = response.result.value as AnyObject? 
                //Handle the results as JSON
                print(value)
                let usertoken = JSON(value)

                print(usertoken)
            



    

这将返回零。有人可以帮助我如何使用 Alamofire 执行 Postman 方法。谢谢!

【问题讨论】:

【参考方案1】:
let user = "your username"

let password = "your password"

let credentialData = "\(user):\(password)".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!

let base64Credentials = credentialData.base64EncodedString()


   let headers = [
            "Authorization": "Basic \(base64Credentials)", 
            "Accept": "application/json",
            "Content-Type": "application/json" ]

//put slash before \ (base64Credentials)

    Alamofire.request("place your url", method: .get, parameters: nil,encoding: URLEncoding.default, headers: headers) .responseJSON  response in
        switch response.result 
            case .success(_):   
               //your success code
                  
            case .failure(_):
               //your failure code
            
    

【讨论】:

不知道你为什么要自己使用创建这个base64EncodedString。 Alamofire 对这里所做的事情有自己的实现。只需传递您的用户名和密码,它将创建一个基本的身份验证 HTTP 标头。HTTPHeader.authorization(username: username, password: password)。然后将其传递到您的标题中。 请分享 swift 5 的语法(alamofire 的最新版本)

以上是关于Alamofire 中的基本身份验证标头的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 5中未设置授权标头?

从 Spring Boot 中的基本身份验证中删除 WWW-authenticate 标头

经过身份验证的 http 请求 swift Alamofire

iOS - Alamofire v2 基本身份验证不起作用

HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头为“基本领域 =”

Spring Security 中的基本身份验证(身份验证失败消息)