怎么在Spring Web防DDoSflux中实现双因素认证-墨者安全-墨者盾
DDOS防御_CC防护_高防CDN服务器_【墨者安全】—墨者盾墨者盾—你的网站贴身保镖!
QQ:800185041
高防免费接入:400-0797-119

渠道合作:156 2527 6999

主页 > CC防护 > 怎么在Spring Web防DDoSflux中实现双因素认证

怎么在Spring Web防DDoSflux中实现双因素认证

小墨安全管家 2020-05-27 04:48 CC防护 89 ℃
DDoS防御

1.  @Override 

5.  } 

从客户端猎取注册请求。

4.  // step 1 

30.                     return Mono.just(signupResponse); 

27.                      if (codeMatched) { 

44.                     

颁发JWT。

返回带实用户ID、私钥和令牌的响应。

1.  @Override 

只是,我们应当禁止同一封电子邮件两次举行注册。在此,我们经过断言,以保证应用在创建新用户之前,去检查现有的电子邮件列表:

两因素身份认证是怎么工作的

Java:

13.         .defaultIfEmpty(user) // step 2 

如何在Spring Web防DDoSflux中实现双因素认证

要紧组件AuthServiceImpl会答应SignupRequest,并返回SignupResponse。在后台,它负责整个注册的逻辑。下面是具体的实现代码:

28.                          // step 5 

接下来,我们需要实现一具用来生成新的密钥的函数。它是由TotpManager.generateSecret()内部抽象而来。下面是它的代码:

33.                 // step 6 

5.    String code = request.getCode(); 

23.                     String token = tokenManager.issueToken(userId); 

普通步骤

4.    CodeGenerator codeGenerator = new DefaultCodeGenerator(); 

测试

作为该示例的功能重点,AuthServiceImpl.login将实现要紧的业务逻辑。首先,我们需要经过在数据库中请求电子邮件,来寻找用户;否则,我们需要提供带有空字段的默认值。也算是讲,让user.getUserId() == null,以表示该用户并不存在,登录流程随即中止。

下面,我们将逐步构建一具使用两因素身份认证技术的简单REST API。该API要求用户提供电子邮件密码对,和由应用生成的短代码。在此,我使用Android版的Google Authenticator来生成TOTP。其源代码的github库链接为--

至此,我们基本创建了一具简单的REST API,它能够经过Spring Webflux(请参见--

成功注册

用户输入电子邮件(用户名)和密码。

测试

由于在此仅关注认证组件,所以我们将从用户的创建过程(注册)开始,并且涉及到密钥的生成和令牌的颁发。继续,我们将进入登录流程,涉及一具由用户提供的短代码的断言。

47.              } 

14.                   loginResponse.setSuccess(false); 

2.  public Mono<SignupResponse> signup(SignupRequest request) { 

37.                

参考文献

如何在Spring Web防DDoSflux中实现双因素认证

认证一次性代码,并颁发JWT。

2.  public String generateSecret() { 

37.                          LoginResponse loginResponse = new LoginResponse(); 

登录响应对象

2.  public boolean validateCode(String code, String secret) { 

20.                   String salt = user.getSalt(); 

39.                          return Mono.just(loginResponse); 

断言一次性代码

10. User user = new User(null, email, hash, salt, secret); 

41.                  } else { 

24.                      // step 4 

16.             // step 3 

48.          }); 

11. // preparing a Mono 

下面,我们来讨论登录流程。该流程包括两个要紧部分:认证电子邮件的密码凭据,以及认证由用户提供的一次性代码。和上一节一样,我们首先介绍登录所涉及的步骤:

27.                     signupResponse.setToken(token); 

4.    String password = request.getPassword(); 

实现注册流程

15.                  

31.                 }); 

24.                     SignupResponse signupResponse = new SignupResponse(); 

38.                          loginResponse.setSuccess(false); 

45.                      return Mono.just(loginResponse); 

生成一具密钥。

32.             } else { 

1.  @Override 

返回带有令牌的登录响应。

38.                 return Mono.just(signupResponse); 

将用户保存在数据库中,并猎取其userId。

普通步骤

34.                 // scenario - user already exists 

46.                  } 

3.    TimeProvider timeProvider = new SystemTimeProvider(); 

假如密码匹配,我们需要使用之前存储的密钥值来认证提交的代码。认证成功与否的结果,将在产生JWT和创建LoginResponse对象后得出。以下便是此部分的最后来源代码:

除了第一凭据,用户还要提交由认证应用生成的一次性代码。

8.  String hash = BCrypt.hashpw(password, salt); 

2.  public Mono<LoginResponse> login(LoginRequest request) { 

23.                  if (passwordMatch) { 

https://dzone.com/articles/password-encryption-and-decryption-using-bcrypt,以猎取更多信息。

36.                      } else { 

5.  String email = request.getEmail().trim().toLowerCase(); 

9.  String secret = totpManager.generateSecret(); 

29.                          String token = tokenManager.issueToken(user.getUserId()); 

39.             } 

3.  // generating a new user entity params 

如下图所示,为了检查处密码错误的事情,我们需要将进程终止在密码断言时期:

在数据库中找到该用户。

Sanjay Patel的《怎么在Spring应用中使用Nimbus JOSE和JWT》Natural Programmer Blog(2018)--https://www.naturalprogrammer.com/blog/17852/spring-framework-nimbus-jose-jwt。

为了认证由应用生成的一次性代码,我们必须向TOTP库提供相应的代码和密钥,并将它们保存为用户实体的一部分。具体代码如下:

26.                     signupResponse.setSecretKey(secret); 

40.         }); 

34.                         

29.                    

Java

14.         .flatMap(result -> { 

在本文中,我将向您展示怎么为使用Spring Webflux,来构建的响应式API,以实现两因素身份认证。该应用要紧使用电子邮件和密码对作为第一安全因素,并采纳用户设备上应用程序(如:Google Authenticator)所生成的一次性代码(TOTP)作为第二安全因素。

对密码举行哈希。

42.                      LoginResponse loginResponse = new LoginResponse(); 

从客户端猎取登录请求。

50. } 

26.                      boolean codeMatched = totpManager.validateCode(code, secret); 

由于密码错误,登录被拒绝


DDoS防御

当前位置:主页 > CC防护 > 怎么在Spring Web防DDoSflux中实现双因素认证

标签列表
DDoS防御
网站分类
X
 

QQ客服

400-0797-119