【问题标题】:What is the best way to secure a mobile application and a Microservices backend archtiecture保护移动应用程序和微服务后端架构的最佳方法是什么
【发布时间】:2017-01-22 16:09:22
【问题描述】:

我目前正在开发一个允许用户通过用户名/密码(OAuth 2.0 密码授予)、Facebook、Twitter 或 Google 登录的移动应用程序。此移动应用程序的后端使用 Spring Boot/Cloud (Java) 编码,并利用微服务原则。我有几个可以通过 Eureka 发现的小服务,并使用 Spring Cloud Config 进行集中配置。它们都使用充当反向代理的 Spring Cloud Zuul 暴露给移动设备。我接受用户名和密码的 Spring Security OAuth 2.0 设置然后返回 JWT 令牌,每次向后端发出请求时都会验证此令牌。我还将用户本地存储在 MongoDB 中并使用方法级别安全性。我想将社交登录添加到我的应用程序并让它执行以下操作:

  1. 在移动设备上进行 OAuth 舞蹈并获取访问令牌

  2. 将访问令牌发送到服务器,并使用 Spring Social 在本地创建一个新用户并将其关联到 Facebook/Twitter/Google,然后返回一个可用于验证请求的 JWT 令牌

  3. 这个 JWT 令牌应该由 Spring Security 创建,我应该仍然可以使用 Method Level Security 并拥有本地用户

  4. 基本上,我想要我的自定义 Spring Security OAuth 2.0 密码授予和社交登录的所有功能

这是我第一次尝试构建系统,因此我期待着那些比我更有经验的人的回应。我见过很多使用 Spring Social 的示例,但它们都是针对 Web 应用程序的,而不是针对移动设备的,这是我目前停留的地方。

我的问题如下:

  1. 我建议的方法是否足够?还有其他无状态且更适合移动应用的方法吗?
  2. Spring Security OAuth 2.0 和 Spring Social Security 是否足以完成此任务?如果是这样,是否有我可以使用的资源?我在网上没有找到很多。
  3. 可以使用 Spring Cloud Security 作为解决方案吗?
  4. 我是否应该考虑使用 Auth0 或 OKTA 等 3rd 方提供者进行身份验证?

【问题讨论】:

    标签: mobile social-networking spring-cloud spring-security-oauth2 spring-social


    【解决方案1】:
    1. 在我看来,将 OAuth2 用于无状态解决方案就足够了,因为:
    2. oauth2 通常是一种设计为可在每个客户端中使用的协议,它能够执行 http 请求。由于您提到的社交网络都支持 OAuth2。如果一切都变糟了,您仍然可以按照他们实施的 oauth2 规范手动使用它们。

    一般来说,我看到“使用 XXX 进行身份验证并将该令牌用作我的请求的 JWT”的问题。这不是直接可能的,因为该令牌是针对他们的资源服务器的。相反,您需要分离 2 个过程:身份验证和授权。简而言之,您可以使用社交端点在您的后端对用户进行身份验证,这会导致您的授权服务器产生第二代 oauth2。这可以使用 spring-oauth 中的所有功能创建 JWT。

    1. 还应使用此库,因为它有助于设置应用程序范围的安全解决方案。例如,您拥有自己的授权服务器(使用社交登录进行身份验证)和多个资源服务器。 spring-cloud-security 有助于在此基础上构建东西,如 Zuul SSO、hystrix+ribbon 支持的 feign 客户端尊重 oauth2 身份验证等等

    2. 我不认为这会对您有所帮助,因为这些服务主要为您提供身份提供者,而您将通过社交网络耦合您的用户身份

    我希望我能以某种方式澄清你的问题

    【讨论】:

    • 感谢您的建议,我一定会看看如何使用现有的 Spring 技术实现解决方案,而不是为 auth0 之类的东西付费。
    【解决方案2】:

    我通过参考两个 spring 示例应用程序来实现它。检查this 步骤,您将能够使用 Zuul、Auth-server 和多个后端 REST 项目实现社交 sso 登录。

    【讨论】:

    • 此解决方案是否适用于 Android 或 IOS 设备的社交登录?以及 Spring Security 可消费和可用的 JWT 令牌的创建?
    • 我没有在 Android 或 iOS 原生应用上测试过它,但它可以在 Chrome/Safari 浏览器中作为网站运行。
    • 对于移动原生应用,请查看link,幻灯片 64 以处理应用中的重定向。在那个演示文稿中,他们提到了如何在 Android/iOS 原生应用程序中处理 OAuth 回调。
    猜你喜欢
    • 1970-01-01
    • 2011-01-17
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2012-08-30
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多