【发布时间】:2019-01-24 06:42:29
【问题描述】:
我正在做一个设置 oauth2 授权的项目。我已经对 Spring Security 的身份验证过程有了简要的了解,但是当我设置 oauth 时,我想知道如何进行身份验证部分?因为在这里我既需要验证客户端凭据也需要验证用户凭据(用户验证将由 LDAP 完成),因为授权类型将是“密码”。并且经过身份验证后,最终通过身份验证的身份验证对象将是拥有其权限的用户,而不是客户端。
【问题讨论】:
我正在做一个设置 oauth2 授权的项目。我已经对 Spring Security 的身份验证过程有了简要的了解,但是当我设置 oauth 时,我想知道如何进行身份验证部分?因为在这里我既需要验证客户端凭据也需要验证用户凭据(用户验证将由 LDAP 完成),因为授权类型将是“密码”。并且经过身份验证后,最终通过身份验证的身份验证对象将是拥有其权限的用户,而不是客户端。
【问题讨论】:
如果您在发布访问令牌时使用资源所有者凭据或任何其他可能获取客户端(程序)凭据和用户凭据的授权类型,那么您将从 AuthenticationManager#authenticate() 获得的身份验证实例将是 OAuth2Authentication .在 OAuth2Authentication 内部,您将能够看到另一个身份验证,其中包含用户的身份验证信息。
使用该 OAuth2Authentication,您可以手动添加逻辑以通过从 SecurityContextHolder.getContext() 获取 OAuth2Authentication 本身来检查您想要检查的不同内容,然后将其类型转换为 OAuth2Authenticaiton,或者简单地将现有的 PreAuthorized 注释与 SpringEL 一起使用。
【讨论】: