移动和Web用户的身份验证/授权架构

时间:2010-11-17 02:38:41

标签: web-services authentication architecture mobile authorization

这对我来说似乎是一个反复出现的问题,因为我似乎在过去几年里都倾向于使用移动应用程序。除了网络用户,我还要对移动用户进行身份验证和授权。我需要使其足够无缝,以便用户可以轻松拥有一个Web帐户,而不会中断他们的数据。我希望解决方案在主题中是架构,而不是特定于任何语言/框架。

要求/假设

  1. 移动用户必须能够在不登录的情况下使用本机应用程序,包括提供内容(标记收藏夹,上传照片等)。
  2. 即使没有指定帐户凭据,移动用户也应该安全且唯一地对Web服务进行身份验证。
  3. 移动用户可能有多个设备,彼此之间并不知情。
  4. 移动用户应该能够注册/登录,这应该将任何内容滚入帐户的所有权。随后登录的每个帐户都应发生此“同步”。
  5. 无论是在移动设备上还是在网上创建帐户,都无关紧要。
  6. 考虑的架构

    1. 没有衬衫,没有鞋子,没有登录=没有贡献。要求登录以提供任何类型的内容。这可以防止需要将设备帐户与主帐户“同步”。只需要一个用户名/密码+令牌即可登录设备。服务器对象:用户,角色
    2. 多设备自我身份验证。服务器与设备协商并交付设备存储的凭据。在注册/登录发生之前,每个设备都会自我验证并与匿名帐户关联。如果发生注册,匿名帐户将转换为已知帐户。如果发生登录,则匿名帐户中的内容将移至已知帐户,然后被丢弃。丢失自我身份验证详细信息的设备将获得新的身份验证详细信息,之前的匿名帐户将被放弃(然后希望稍后被丢弃)并且无法恢复,因为它从未转换为已知帐户。服务器对象:用户,角色,设备
    3. 您认为什么是好的解决方案?其中之一,还是其他什么?

4 个答案:

答案 0 :(得分:2)

我想提出类似于2的想法。

为每个移动设备生成UUID。当用户生成内容并将内容发送到服务器时,它将用于在以后出现时识别设备。

如果用户在以后的任何时间想要创建一个网络帐户,他可以在网上或设备上注册。如果用户已经拥有一个网络帐户,他可以选择在他的移动设备上提供一次(或设备)现有凭证,并将该设备链接到他在服务器端的网络帐户。

在服务器端,我将允许两种不同类型的实体作为身份:通过凭证进行身份验证的Web用户(OpenID在我看来是一个附加功能)和通过其GUID进行身份验证而无需用户干扰的设备。当然,Web用户实体可以拥有多个设备实体。当用户选择将其设备链接到现有帐户时,设备实体链接到帐户。内容通常与身份相关联。

保留用户和设备之间的链接,也可以用于显示内容的来源。

您无需为移动用户创建/删除/转换生成凭据的帐户。您也不需要在移动设备上存储凭据。

仍有一些安全注意事项未决,具体取决于应用程序上下文的重要性。如果没有任何安全措施,攻击者会发现滥用UUID很容易。

答案 1 :(得分:2)

我认为这是从错误的方向看待的。在服务器上定义由任意值定义的标识。可能只是一个数据库序列。将任何人口统计信息(姓名,电子邮件...)和使用历史与此身份相关联。

另外,在服务器上定义身份验证实体。这可以是用户/密码。它可以是设备GUID / UUID。它可以是像OpenID这样的联合ID。给定身份可以具有(并且通常将在您的用例中)多个关联的身份验证实体。很可能是同一类型的多个身份验证身份。 (例如我的智能手机的GUID,我的iPad的GUID ......)

您的前端(无论是基于Web还是基于应用程序)使用定义的API对用户进行身份验证;使用前端支持的任何机制。

在某些情况下(特别是本机应用),未知ID的显示会触发创建新身份。但是,正如有人指出的那样,在这种情况下,您应该询问用户是否要连接到现有身份。他们需要提供身份验证(一次)以建立该连接。

另一点,无论服务器用于唯一指定标识,都应该是从不提供给客户端的值。客户端只知道身份验证机制及其数据。也就是GUID / UUID,用户名/密码......

除了上面列出的技术之外,像OAuth这样的东西比本地生成的GUID更安全。这些是以下之一:容易确定或b:容易丢失。如果该值具有高度可预测性(比如电话号码),则很容易被欺骗。如果它是在运行时生成的并且包含难以预测的值,例如当它首次生成时的当前时间的哈希值,那么它必须存储在设备上并且如果擦除设备则很容易丢失。可以生成良好的GUID,但它们通常是特定于设备类型的。从ROM,IMEI中检索到的设备序列号......这很容易实现。但是,与我可能会感到满意的相比,它更具体的设备依赖性。

我在整个方法中看到的最大的障碍是允许现有设备(无用户名/密码)用户坐在PC浏览器并连接到他现有的帐户将会很尴尬。

答案 2 :(得分:0)

第2号作为基本决定是足够好的。用户讨厌注册;)因此,无需注册即可使用服务的能力。

您可以使用GUID / UUID来识别设计。并在用户登录前将其用作匿名登录。

但如果2个(或更多)人使用1个设备该怎么办?或设备将被丢失,被盗? 我认为没有一点可以涵盖这些案例。

我不知道您设计的是哪种Web服务,因此无法提供更多建议。

答案 3 :(得分:-3)

一种解决方案是生物识别。如果移动设备具有生物识别传感器,例如指纹读取器,则用户将在购买时使用该设备登记生物识别(仅由于隐私问题)。可以编写应用程序,使每个安全事务都要求用户验证生物识别。

这似乎并不太遥远。摩托罗拉Atrix有一个指纹传感器......