Spring 使用 Google + Facebook 登录为 Android 应用启动 REST api 安全

Spring boot REST api security for Android App using Google + Facebook login

我正在构建一个具有 2 层的应用程序:-

1.本机 Android 应用程序 - 包含通过 Facebook 登录的功能 + Google 以减轻登录的痛苦。

2。 Java 服务器使用 Spring Boot - 典型的 MVC 端点,例如 REST api + UI 管理屏幕。

Facebook (FacebookSdk) 和 Google (GoogleApiClient) 登录部分正在使用以下 Android 依赖项进行工作和测试:-

dependencies {
   compile 'com.facebook.android:facebook-android-sdk:4.6.0'
   compile 'com.google.android.gms:play-services-auth:9.0.0'
   ....

}

API 明智的我们有:-

/api/signin - called when a user signs in successfully with either Facebook + Google and creates an entry in a users database table.

还有一些其他的 API end-points 例如报价

/api/offers/<user_id> - returns offers to an already registered user.

我不确定最佳实践方式:-

  1. android 应用程序如何 API 调用 /api/signin REST 端点(即 headers etc 可以发送到我假设的端点 没有安全性 因为未注册的用户会点击这个)。另外,哪些字段可以保存在 users db table?

  2. android 应用程序如何 API 调用例如/api/offers/ 给已经注册的用户?即 Android 应用应该在何时传递令牌等?

  3. spring 保护这些端点安全的最佳实践方法。

假设 OAuth 2 是要走的路,但任何建议/指示将不胜感激。

Ans:1 /api/signin 在登录应用程序时会将用户信息发送到服务器,服务器将生成令牌,此令牌将在登录应用程序时返回可以保存此令牌,它可以不时更改。 您可以将任何 http 库用于 web 服务,如 volley、Retrofit 等。

您需要存储在数据库中的字段:userId、userName、userToken。

Ans:2 /api/offers/ 你可以在数据库中检查用户的 userId,如果它在那里存在,那么你将抛出已经存在于 Web 服务响应中的 msg。

Ans:3 为您的 Web 服务使用 SSL 实现,这将更加安全,正如您提到的,您将为每个用户使用令牌,以便可以访问它仅用于验证用户。

注意:- 令牌应每 30 分钟或您希望的任何时间更改一次,这将使您的身份验证功能更加安全。