通过oAuth2 Spring Security获取身份验证(Principal)对象?

时间:2017-05-27 13:28:43

标签: java spring spring-mvc spring-security oauth-2.0

因此,当用户在客户端设备上获取授权的JWT以及在oAuth2环境中通过授权服务器时,我首先想到了可以实现哪个自定义AuthenticationManager甚至自定义AuthenticationProvider。

然后它打了我,呃,用户不需要通过AuthenticationManager,因为他们已经经过认证"通过授权服务器使用系统中实现的任何oAuth2流程。他们有JWT访问令牌来证明它,事实上,他们甚至无法在没有授权访问令牌的情况下命中任何资源服务器端点。

但是,我仍然想要一种方法来访问包含所有用户信息的Authentication对象。

如果不使用AuthenticationManager,您将如何创建和获取此Authentication对象的引用?我在这里很困惑。

我想要这个Authentication对象的主要原因是因为我计划在Spring Security的ACL中使用自定义表达式的方法级安全性。换句话说,我想要oAuth2,我也想使用ACL来精确控制哪些用户对哪些域对象拥有授权/权限。

那么在设置oAuth2后,如何访问此Authentication对象(甚至可能使用用户的当前访问令牌作为字段/属性创建)?

感谢。

1 个答案:

答案 0 :(得分:1)

一个有以下控制器方法:

@RequestMapping(...)
Output do(Input input)

您可以将Authentication对象添加到参数:

@RequestMapping(...)
Output do(Input input, Authentication authentication)

Spring将自动连接此依赖项。 如果您在更深层/其他类中,则可以使用

 SecurityContextHolder.getContext().getAuthentication()