关于身份验证问题的 Swift 状态码 401

Posted

技术标签:

【中文标题】关于身份验证问题的 Swift 状态码 401【英文标题】:Status code 401 at swift about authentication issue 【发布时间】:2017-07-02 08:20:57 【问题描述】:

全部 我无法通过 swift 在我的网络服务器上进行身份验证。 我可以通过 Postman 在我的网络服务器上进行身份验证。

这是邮递员

这是我的 swift。

class ViewController: UIViewController 
        let authLoginUrl = "http://ec2-52-79-171-171.ap-northeast-2.compute.amazonaws.com:8000/rest-auth/login/"
        let keychain = Keychain(service: "wanote")
        let tokenUse = "Token 869463aacc84f0fb9edfb251fa73b352fc52a4d5"
        let projectUrl = "http://ec2-52-79-171-171.ap-northeast-2.compute.amazonaws.com:8000/api/user/ryulstory"
        override func viewDidLoad() 
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            if let Purl = URL(string: self.projectUrl)
                var mutableUrlRequest = URLRequest(url: Purl)
                mutableUrlRequest.setValue(self.tokenUse, forHTTPHeaderField: "Authorization")
                mutableUrlRequest.httpMethod = "GET"
                _ = Alamofire.SessionManager.default.request(mutableUrlRequest)
                    .responseJSON response in
                        print(response.request)
                        print(response.response)
                        print(response.data)
                        print(response.result)
            
        
    
        override func didReceiveMemoryWarning() 
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        


    

我认为设置值可能是错误的。你能教我怎么回事吗?

【问题讨论】:

【参考方案1】:

您是否将App Transport SecurityAllow Arbitrary Loads插入YES?进入你的Info.plist?此 plist 修改允许 Apple 传输安全规则允许使用 200 HTTP 服务器进行请求。

【讨论】:

【参考方案2】:

mutableUrlRequest.setValue(self.tokenUse, forHTTPHeaderField: "Authorization") 中,您的self.tokenUse 应该是您的客户端ID。如果正确,为什么你的tokenUse 有“Token”前缀?

试试这个

let headers: HTTPHeaders = [
    "Authorization": self.tokenUse,
    "Accept": "application/json"
]

Alamofire.request("http://ec2-52-79-171-171.ap-northeast-2.compute.amazonaws.com:8000/api/user/ryulstory", headers: headers).responseJSON  response in

    debugPrint(response)

【讨论】:

我认为 forHTTPheaderField 与 key(Authorization) 相同,而 self.tokenUse 与 Postman 上的值相同。所以在邮递员的价值上它需要令牌前缀。 当你使用 Alamofire 时,你能用我编辑的答案再试一次吗?

以上是关于关于身份验证问题的 Swift 状态码 401的主要内容,如果未能解决你的问题,请参考以下文章

更改 Restlet 发回的状态码以进行身份​​验证

在身份验证失败时返回自定义状态码 .Net Core

了解 401 的基本身份验证

如果尝试身份验证不成功,如何在过滤器中返回 401 状态

HTTP 状态 401 - 身份验证失败:解码传入 SAML 消息时出错

通过基本身份验证访问 REST 的 Angular2 抛出“预检响应具有无效的 HTTP 状态代码 401”