【问题标题】:Vapor Client with Authentication具有身份验证的 Vapor 客户端
【发布时间】:2017-08-15 16:00:15
【问题描述】:

我需要在我试图从中提取数据的服务器上进行身份验证,我目前将其连接到服务器:

    let urlString = "\(makeUrl(grammar: grammar))&\(query)"
    let drop = Droplet()

    return try drop.client.get(urlString)

但我似乎无法弄清楚如何获得附加到 get 请求的凭据。我尝试将用户名和密码放入 url,但发现蒸汽客户端不允许这样做:

    /*
      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)
    */

【问题讨论】:

    标签: swift3 vapor


    【解决方案1】:

    通过 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
    
    }
    

    【讨论】:

      【解决方案2】:

      与错误状态一样,以明文形式包含用户名/密码凭据作为 GET uri 参数存在巨大的安全风险。您应该(至少)在 POST 调用中发送它们。

      查看User Authentication with Vapor 上的博文,了解使用 Vapor 设置用户身份验证的相当不错的示例。博客现在有点老了(从那时起,Vapor 发生了很大变化),但我认为其中的几乎所有内容都应该可以正常工作。至少在概念上。

      此外,您还加入了 Vapor Slack 频道并在那里提问 :) qutheory.slack.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 2019-01-24
        • 2013-06-17
        相关资源
        最近更新 更多