Spring中基于OAuth2的认证和授权是什么

时间:2020-02-23 14:34:43  来源:igfitidea点击:

OAuth2允许第三方应用程序接收对HTTP服务的有限访问,该服务或者代表资源所有者,或者允许第三方应用程序以自己的名义获得访问权。多亏了OAuth2,服务提供商和消费者应用程序可以安全地相互交互。

工作流

在从外部应用程序访问用户的受保护数据之前,需要执行几个步骤。

用户被带到服务提供商服务器

e、 g.Facebook或者LinkedIn

用户必须向外部应用程序授予权限才能访问资源,例如读取或者甚至写入与他/她的数据相关的资源。

授权服务器正在将访问令牌发送到消费者应用程序。

现在,外部应用程序可以从资源服务器访问用户的受保护数据。

不同角色的术语

在OAuth2中,有4个角色:

资源所有者

用户

资源服务器

托管受保护资源并基于访问令牌提供对其的访问的服务器

顾客

寻求许可的外部应用程序

授权服务器

在对用户进行身份验证后发出访问令牌

不同的代币

令牌有两种类型:

访问令牌

由授权服务器根据用户身份验证提供

允许第三方应用程序访问用户数据

刷新令牌

用于在原始令牌过期时获取新的访问令牌,因此该名称

但是,由于安全原因,并不总是能够获得此令牌

@EnableOAuth2Sso

@Configuration
@EnableZuulProxy
@EnableOAuth2Sso
@Order(value = 0)
public class AppConfiguration extends WebSecurityConfigurerAdapter {

  @Autowired
  private ResourceServerTokenServices resourceServerTokenServices;

  @Override
  public void configure(HttpSecurity http) throws Exception { 
          http.csrf()
          .disable()
          .authorizeRequests()
          .antMatchers("/auth-server/**", "/login")
          .permitAll()
          .anyRequest()
          .authenticated()
          .and()
          .logout()
          .permitAll()
          .logoutSuccessUrl("/");
  }
}

@enableauth2sso注释通知Spring给conifugre一个OAuth2TokenRelayFilter。此筛选器从用户的HTTP会话检索已获得的访问令牌并填充它们。

@Order注释的作用是确保我们的WebSecurityConfigurerAdapter创建的过滤器优先于另一个WebSecurityConfigurerAdapter创建的过滤器。

@EnableResourceServer

现在,让我们设置资源服务器。

@SpringBootApplication
@EnableResourceServer
@Controller
@RequestMapping("/")
class ResourceServerImplementation {

  public static void main(String[] args) {
      SpringApplication.run(ResourceServerImplementation.class, args);
  }

  @RequestMapping(method = RequestMethod.GET)
  @ResponseBody
  public String greetPrincipal(Principal principal) {
      return "Greetings, " + principal.getName();
  }
}

此应用程序返回发起该请求的主体的名称。同样,我们需要一个有效的访问令牌来访问资源服务器的端点。

这两个代码片段取自这里