Swift3 具有身份验证的Vapor客户端
我需要在我试图从中提取数据的服务器上进行身份验证,我当前使用以下方式将其连接到服务器:Swift3 具有身份验证的Vapor客户端,swift3,vapor,Swift3,Vapor,我需要在我试图从中提取数据的服务器上进行身份验证,我当前使用以下方式将其连接到服务器: let urlString = "\(makeUrl(grammar: grammar))&\(query)" let drop = Droplet() return try drop.client.get(urlString) 但我似乎不知道如何在get请求中附加creds。我尝试将用户和密码放入url,但发现vapor客户端不允许: /* Useri
let urlString = "\(makeUrl(grammar: grammar))&\(query)"
let drop = Droplet()
return try drop.client.get(urlString)
但我似乎不知道如何在get请求中附加creds。我尝试将用户和密码放入url,但发现vapor客户端不允许:
/*
Userinfo (i.e., username and password) are now disallowed in HTTP and
HTTPS URIs, because of security issues related to their transmission
on the wire. (Section 2.7.1)
*/
与错误状态一样,以明文形式包含用户名/密码凭据作为GET uri参数也是一个巨大的安全风险。你应该(至少)通过电话发信 查看上的博客文章,了解一个使用Vapor设置用户身份验证的相当不错的示例。这个博客现在有点老了(Vapor从那时起已经改变了很多),但我认为它几乎所有的东西都应该仍然有效。至少在概念上 此外,您还可以加入Vapor Slack频道并在其中提问:)
通过Vapor Slack通道的一点轻推和AlamoFire repo中的一点代码潜水,我找到了解决方案 首先需要对用户名和密码进行base64编码,然后将其添加到http头中
func performRequest(query: String, grammar: FMPGrammar) throws -> Response {
let urlString = "\(makeUrl(grammar: grammar))?\(query)"
let loginString = "\(userName):\(password)"
let b64Login = Data(loginString.utf8).base64EncodedString(options: [])
let drop = Droplet()
let result = try drop.client.get(urlString, headers: [.authorization : "Basic \(b64Login)"])
return result
}