带身份验证的 Vapor 客户端
Vapor Client with Authentication
我需要在我试图从中提取数据的服务器上进行授权我目前已将其连接到服务器:
let urlString = "\(makeUrl(grammar: grammar))&\(query)"
let drop = Droplet()
return try drop.client.get(urlString)
但我似乎无法弄清楚如何将信誉附加到获取请求。我尝试将用户名和密码放入 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)
*/
与错误状态一样,将 username/password 凭据作为 GET uri 参数以纯文本形式包含是一个巨大的安全风险。您应该(至少)在 POST 电话中发送它们。
查看 User Authentication with Vapor 上的博客 post,查看使用 Vapor 设置用户身份验证的相当不错的示例。该博客现在有点旧了(Vapor 从那时起发生了很大变化),但我认为其中的几乎所有内容都应该仍然有效。至少在概念上。
此外,您加入 Vapor Slack 频道并在那里提问 :)
qutheory.slack.com
通过 Vapor Slack 频道的一些推动和在 AlamoFire 存储库中的一些代码挖掘,我找到了解决方案。
首先需要将用户名和密码进行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
}
我需要在我试图从中提取数据的服务器上进行授权我目前已将其连接到服务器:
let urlString = "\(makeUrl(grammar: grammar))&\(query)"
let drop = Droplet()
return try drop.client.get(urlString)
但我似乎无法弄清楚如何将信誉附加到获取请求。我尝试将用户名和密码放入 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)
*/
与错误状态一样,将 username/password 凭据作为 GET uri 参数以纯文本形式包含是一个巨大的安全风险。您应该(至少)在 POST 电话中发送它们。
查看 User Authentication with Vapor 上的博客 post,查看使用 Vapor 设置用户身份验证的相当不错的示例。该博客现在有点旧了(Vapor 从那时起发生了很大变化),但我认为其中的几乎所有内容都应该仍然有效。至少在概念上。
此外,您加入 Vapor Slack 频道并在那里提问 :) qutheory.slack.com
通过 Vapor Slack 频道的一些推动和在 AlamoFire 存储库中的一些代码挖掘,我找到了解决方案。
首先需要将用户名和密码进行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
}