保护移动应用程序和微服务后端架构的最佳方法是什么

时间:2016-09-14 18:37:32

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

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

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

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

  3. 这个JWT令牌应该由Spring Security创建,我仍然可以使用方法级别安全性并拥有本地用户

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

  5. 这是我构建系统的第一次尝试,因此我期待那些经验丰富的人的回应。我见过很多使用Spring Social的例子,但是所有这些例子都是针对Web Apps而不是针对Mobile,这是我目前所处的位置。

    我的问题如下:

    1. 我的建议方法是否合适?还有其他无状态方法,对移动应用程序更好吗?
    2. Spring Security OAuth 2.0和Spring Social Security是否足以实现这一目标?如果是这样,我可以使用哪些资源?我在网上找不到很多。
    3. 可以将Spring Cloud Security用作解决方案吗?
    4. 我是否应该考虑使用第三方提供商进行身份验证,例如Auth0或OKTA?

2 个答案:

答案 0 :(得分:1)

  1. 使用OAuth2作为无状态解决方案是我的选择,因为:
  2. oauth2通常是一个旨在可在每个客户端中使用的协议,它可以执行http请求。由于你提到的社交网都支持OAuth2。如果一切都变坏了,你仍然可以手动使用它们,而不管它们实现的oauth2规范。
  3. 一般情况下,我发现"使用XXX进行身份验证并将该令牌用作我的请求的JWT"。这不是直接可能的,因为该令牌用于其资源服务器。相反,您需要分离2个进程:身份验证和授权。简而言之,您可以使用社交端点对后端中的用户进行身份验证,从而导致授权服务器生成第二个oauth2。这可以使用spring-oauth的所有功能创建JWT。

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

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

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

答案 1 :(得分:0)

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