【问题标题】:Kitura iOS Application User Authentication mongodbKitura iOS 应用程序用户认证 mongodb
【发布时间】:2017-02-03 11:38:20
【问题描述】:

我当前的应用程序正在解析服务器上运行,我想将它移植到 Kitura。到目前为止,我已经成功连接到在 Parse Server 后面运行的 mongodb 并提供数据。

对于 web 部分,我已经设法使用带有用户 ID 和密码的静态字典来进行 http 基本身份验证。

我在 iOS 部分苦苦挣扎。我的应用程序已经有很多用户。用户存储在 mongodb 中的一个表中。我有三种类型的用户:

  • Facebook 用户。使用 Facebook 帐户注册的用户。
  • 直接用户。使用应用注册表单创建帐户的用户。
  • 匿名用户。对他们来说,我正在生成一个唯一的 ID,并将其存储在他们的设备中,这样我就可以保存他们的数据。对于这个问题的上下文,他们应该被视为直接用户。

要将用户从解析服务器迁移到kitura,我计划采取以下步骤:

  1. 首次应用启动时。创建一个随机密钥并将其存储在用户表中。
  2. 保存后,使用此密钥登录 Kitura。
  3. 成功登录 Kitura 后删除密钥。

我已经安装了移动访问客户端和推送通知。

我无法解决的是使用什么方法来验证用户,无论是服务器端还是客户端。

到目前为止,基本的 http 身份验证有效(仅限直接用户),但我相信还有更好的方法。

我当前的基本 http 身份验证

let url = "http://172.20.10.3:8080/private2/class/KiteSpot?responseType=json"
var mutableURLRequest = URLRequest(url: nsURL)
mutableURLRequest.httpMethod = "GET"
let loginString = "<user>:<pass>"
let loginData = loginString.data(using: String.Encoding.utf8)!
let base64LoginString = loginData.base64EncodedString()
mutableURLRequest.addValue("DirectUserToken", forHTTPHeaderField: "X-token-type")
mutableURLRequest.addValue("text/plain", forHTTPHeaderField: "Accept")
mutableURLRequest.addValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
self.sendRequest(mutableURLRequest, onSuccess: onSuccess, onFailure: onFailure)

【问题讨论】:

    标签: swift ibm-cloud ibm-mobile-services


    【解决方案1】:

    基于 SSL 的基本身份验证是一种合理且简单的解决方案,但 has a few shortcomings

    移动客户端访问实现了 OAuth2 协议,该协议使用更安全的令牌授予策略,因为您不会在每次请求时通过网络发送用户的原始凭据。 MCA 支持 Facebook、Google 和自定义身份验证方案。 MCA/OAuth2 的主要优点是,如果您的客户端需要被授予访问多个其他服务器或第三方的权限,这些方将只需要一个令牌(带有过期规则)来进行身份验证。 (Good article for getting started with MCA.)

    根据您的应用程序所做的事情将影响您决定为身份验证方案选择的内容。


    另外,我不确定您是如何在数据库中存储用户名和密码的,但如果您还没有这样做,我建议您使用salting + hashing,以确保您的用户在您的数据库受到威胁时是安全的。

    【讨论】:

    • 我已经设置了移动客户端访问。我目前正在尝试制定自定义身份提供程序,在那里我可以根据我的数据库检查用户和密码。但找不到有关如何实现这一点的详细信息。应该在客户端调用哪些端点以及在服务器上触发哪些事件。
    • 经历这可能会有所帮助:github.com/ibm-bluemix-mobile-services/…
    • 我已经完成了上面的例子并将其转换为swift。但是 startAuthorization 和 handleChallengeAnswer 永远不会被调用,当我从移动端请求一个私有 URL 时。我可能应该为它创建一个中间件,但我找不到有关如何创建它的说明。 kitura 可能还没有为此做好准备。
    • 是,但不在开发阶段。目前,我正在使用基本的 http 身份验证,并且正在关注您发送给我的链接。一旦完成开发,我将从基本身份验证转移到 mca。
    猜你喜欢
    • 2015-02-24
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2011-02-05
    • 2020-07-18
    相关资源
    最近更新 更多