【问题标题】:Handling authentication in a multi-tier architecture在多层架构中处理身份验证
【发布时间】:2017-03-12 16:06:20
【问题描述】:

我正在编写一个 API,它将被 Web 应用程序以及本机 iPhone 和 Android 应用程序使用。

用户将通过网络应用程序或本机应用程序创建帐户、登录、注销等。但是所有的业务逻辑都在 API 中。因此,Web 应用程序和原生应用程序大多是仅包含 UI 以与 api 集成的薄层。

问题:

当您拥有 Web 应用程序或本机应用程序的此外层时,有哪些通用方法/技术可用于根据 API 对用户进行身份验证。

相关问题

Authenticating users in iPhone app

【问题讨论】:

  • 看看OAuth2

标签: android iphone api authentication web-applications


【解决方案1】:

披露:我在 Auth0 工作。

代币!代币!代币!

在 Web API 中对用户进行身份验证的最普遍方法是使用基于令牌的身份验证。该过程可以简化为以下步骤:

  1. 客户端应用程序在请求中包含一个令牌(Authorization 标头)。
  2. Web API 验证令牌,如果有效,则根据与令牌关联的信息处理请求。

这种类型的令牌通常称为不记名令牌,因为应用程序要访问受 API 保护的资源唯一需要做的就是提供令牌。将 HTTPS 与这种类型的身份验证一起使用是至关重要的,以确保在从客户端到服务器的过程中,攻击者无法轻易捕获令牌。

令牌可以进一步分类为:

  • 按值标记 - 相关信息包含在标记本身中
  • by-reference 令牌 - 相关信息保存在服务器端存储中,然后使用令牌值作为键找到这些信息

一种用于按值标记的流行格式是 JWT 格式 (Get Started with JSON Web Tokens),因为它以 Web 友好的方式编码,并且还具有相当简洁的表示,以减少线路上的开销。

在按值或按引用令牌之间进行选择是一个考虑每种方法的优缺点并查看您可能有的任何具体要求的问题。如果您使用 JWT,请查看 jwt.io 以获取有关在各种技术中支持此格式的库的参考。

我的应用程序首先如何获取令牌?

设置您的 API 以使用令牌对用户进行身份验证可以被视为最简单的部分,尽管仍然需要考虑所有常见的安全预防措施。

基于令牌的身份验证系统的最大问题是建立一个系统,该系统可以向可能使用不同技术或完全不同平台的不同客户端应用程序颁发令牌。

如另一个答案所述,此问题的答案是依赖 OAuth 2.0OpenID Connect 协议并执行以下操作之一:

  • 实施符合上述协议的身份提供者/授权服务器系统
    耗时且复杂,但您遵循标准,因此您不太可能搞砸,而且您还将获得互操作性

  • 将身份验证委托给第三方身份验证提供商,例如Auth0
    很容易上手,取决于使用量(Auth0 上的免费计划goes up to 7000 users),它会花费你金钱而不是时间

【讨论】:

    【解决方案2】:

    你应该去看看

    1. OpenID
    2. OAuth

    并设置身份服务器。 取决于您使用的技术,IdentityServer 广泛可用 一个是.net 平台上的IdentityServer4

    请不要犹豫,询问更多! :D

    【讨论】:

    • 那么您是否会直接使用身份服务器进行身份验证,无论是 webapplication->identityserver 还是 nativeapp->identityserver,它都会将令牌返回给您,然后您将令牌传回给用户,然后用户使用它向 web 应用程序发出请求时的令牌,然后将其传递给 api,在处理任何业务逻辑之前对其进行验证?
    • 嘿。本机应用程序会要求 api 访问谁要求身份服务器使用指定的令牌批准他们的身份。 Web 应用程序为用户提供 cookie 并要求身份服务器进行身份验证。即使它是一个单页应用程序......网络服务器应该处理身份验证以确保您的资源和机密安全:) Identityserver 将来可以支持其他节点和模块或第三方访问您的资源并充当单点登录你的世界。
    【解决方案3】:

    我同意@Fabian Bettag 和@WickStargazer。

    您可以使用OAuth 2.0,它非常适用于网络应用程序、移动客户端和 java-script 客户端。您还可以使用OpenID Connect 根据授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似 REST 的方式获取有关最终​​用户的基本配置文件信息。 OpenID Connect 1.0OAuth 2.0 协议之上的一个简单身份层。

    注意:-您还可以实现SOAP 用于登录、注册和注销(安全敏感API),以增加您的应用程序的安全性。

    希望这会有所帮助,如果有任何帮助,请告诉我。编码愉快!!!

    【讨论】:

      猜你喜欢
      • 2011-11-26
      • 2011-03-17
      • 2018-09-24
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      相关资源
      最近更新 更多