首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >authenticationProvider通过ReST API调用对用户进行春季安全认证

authenticationProvider通过ReST API调用对用户进行春季安全认证
EN

Stack Overflow用户
提问于 2018-04-03 14:50:56
回答 1查看 773关注 0票数 1

我现在正在探索微服务中用户的身份验证。为此,我创建了身份验证服务- checkUserAuthentication。同时也提供微型服务。这已经部署在云中了。现在,我正在创建具有特定业务逻辑的新服务。在此服务中,需要通过使用spring安全性中的authenticationProvider来验证和检查用户访问此端点的授权。

为此,我阅读并探讨了以下教程,

  1. https://dzone.com/articles/spring-security-custom
  2. http://roshanonjava.blogspot.in/2017/04/spring-security-custom-authentication.html
  3. http://javasampleapproach.com/spring-framework/spring-security/spring-security-customize-authentication-provider
  4. http://www.baeldung.com/spring-security-authentication-provider

在这里,它们是在类AuthenticationProvider中实现的CustomAuthenticationProvider。

在方法上,他们接收用户名和密码如下,

代码语言:javascript
运行
复制
public Authentication authenticate(Authentication authentication) throws 
 AuthenticationException {
    String name = authentication.getName();
    String password = authentication.getCredentials().toString();

    Optional<User> optionalUser = users.stream().filter(u -> u.index(name, 
     password)).findFirst();

    if (!optionalUser.isPresent()) {
        logger.error("Authentication failed for user = " + name);
        throw new BadCredentialsException("Authentication failed for user = " + name);
    }

    // find out the exited users
    List<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
    grantedAuthorities.add(new SimpleGrantedAuthority(optionalUser.get().role));
    UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(name, password,
            grantedAuthorities);

    logger.info("Succesful Authentication with user = " + name);
    return auth;
}

这些是文件中的代码。而不是这种方法,我需要用不同的方式来做。在这里,我要添加我的要求:

我的要求:我需要从API Request.And接收用户名和密码来检查这个用户名和密码,我需要调用已部署的API checkUserAuthentication和checkUserAuthorization。

我对此的怀疑:

  1. 我是否可以在“公共身份验证(身份验证)”方法中直接调用这些API?
  2. 我是如何从收到的请求中接收用户名和密码的?
  3. 为什么我们要使用UsernamePasswordAuthenticationToken?,如果我们发送的是JWT令牌而不是用户名和密码,那么哪个类将用于提供回复?

因为我只从Security开始,所以我对安全世界很陌生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 15:51:57

  1. 我是否可以在“公共身份验证(身份验证)”方法中直接调用这些API?

是。

  1. 我是如何从收到的请求中接收用户名和密码的?

与他们在身份验证方法中所做的相同。

  1. 为什么我们要使用UsernamePasswordAuthenticationToken?,如果我们发送的是JWT令牌而不是用户名和passowrd,那么哪个类将用于提供回复?

UsernamePasswordAuthenticationToken在内部由spring安全性使用。当您在春季创建一个会话时,这会出现在图片中。它包含用户信息(例如。电子邮件等)和权威(角色).For示例,当您在应用程序中接收到JWT令牌时,您将验证JWT令牌(签名等)。在成功验证JWT之后,您将创建一个UsernamePasswordAuthenticationToken对象,spring将在会话中保存它。对于每个传入的请求,spring将调用该对象上的boolean isAuthenticated()方法,以查找用户是否可以访问所需的资源。

现在,当您已经得到所有答案时,我建议您使用Oauth2进行引导微服务。有很多的例子,如何实现它和定制它为您的需求。(基本上,您必须实现您的授权服务器,它将使用您的服务checkUserAuthentication对用户进行身份验证,并生成访问权限。您的微服务的每个使用者都需要发送从授权服务器获得的这个访问权限,并且您需要在您的微服务中验证它。因此,您的微服务将充当资源服务器)。

希望能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49633064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档