首页 > 解决方案 > 使用 spring security 和 mongodb 进行 Rest 身份验证

问题描述

我已经实现了一个Spring应用程序,mongodb现在我已经使用 Spring security 和 Mongodb 实现了 Rest 身份验证,现在我必须添加Authorization标头,如果没问题,它只会显示来自 api 调用的数据Authorization,从现在开始没问题,但我想知道如何获得这个值?我的意思是我想登录应用程序,我应该获得授权吗?如果不是,登录响应应该返回此授权以在下一次调用中使用它?我也读过aws tokenof oauth2,但是我真的很想知道这个过程,我的意思是,一个普通用户可以登录到应用程序然后通过授权拨打电话的流程是什么?

我的平台是:

数据库——MongoDB

服务器——春天

网络——角

应用——安卓

这是一个问答游戏项目,可以支持多游戏选项(超过 1 名玩家同时玩)

所以我需要了解的是从 APP / WEB 我必须打个电话让我们说 api/v1/login 然后发送用户和密码,好的,我必须创建 bcrypted 和 salt 的东西来存储它的部分在哪里进入数据库?我是否必须在应用程序上执行此操作,然后在登录调用中通过 JSON 发送例如 SHA 内容,或者最好将密码发送到服务器,以便服务器完成所有工作并将这些内容存储在数据库中?

标签: springmongodbspring-securityspring-security-oauth2spring-security-rest

解决方案


在您描述的场景中,既不使用OpenID Connect也不使用OAuth2是没有意义的。身份验证和资源都有一个服务器。场景大概是这样的:

  1. 客户端(Angular 或 App)通过安全的 HTTP 连接以纯文本形式将凭据发送到服务器以登录
  2. 服务器响应访问刷新令牌
  3. 两个令牌都需要保存在客户端设备上(例如本地存储)
  4. 您将访问令牌与需要身份验证的每个请求一起发送
  5. 访问令牌过期之前,您会触发某个 REST 调用以使用您的刷新令牌刷新令牌
  6. 服务器发回一个新的访问和一个新的刷新令牌。存储它们并删除旧的。

使用SpringBoot,您几乎可以免费获得一切。除非你没有具体的例子,否则我会不遗余力地提供代码片段。您会在auth0 站点上找到精彩而简洁的示例。

在此处找到有关如何将访问令牌与您的请求一起发送的 Angular 教程

关于您的数据库问题,一个简单但有效的方案可能是将加密密码与您的用户一起存储(在数据库中)。如果用户登录,他会将您需要加密的纯文本密码发送给您,并将其与您存储的密码进行比较。切勿存储纯文本密码,仅将其用于登录过程。您可能需要考虑在 Java 应用程序中使用密码的几个最佳实践。


推荐阅读