[OAuth2]关于oauth2登陆的流程和配置详解(下)

305 阅读1分钟
更新:
clientId和clientSecret可以直接用Base64加密后放在请求头中,一样可以请求到token


对密码模式来说,首先需要验证client和secret,然后才是验证用户名和密码,这两个流程逻辑上很相似,都是通过 某个provider 来进行验证,验证通过后会生成一个Authentication,默认情况不客制化的时候,甚至都会通过同一个provider:DaoAuthenticationProvider 来进行验证,只不过其中默认的UserDetailsService不同罢了。

我们都知道了/oauth/token接口是在TokenEndPoint.java里的,用户名和密码的验证逻辑也是从这里发起,而client的验证在这之前已经完成了。

client的验证是在过滤器中的,具体我们可以看xml中的配置:


ClientCredentialsTokenEndpointFilter的doFilter()方法被调用(其实是它父类的该方法吗,因为它没有重写)

后面调用了一系列方法,最后在DaoAuthenticationProvider.java的additionalAuthenticationChecks()方法中完成对client和secret的验证

划重点!!!!!!!!!!!!!


划重点!!!!!!!!!!!!!

值得一提的是验证完成之后,生成的Authentication会被带到TokenEndPoint的接口中,应该是以参数Principal的形式传入。

oauth2提供了很多默认的配置,在查找的时候比较费力,例如上面验证的provider,xml中的配置如下:


对于图中红框的配置,是默认使用了DaoAuthenticationProvider ,我们也可以显示地指定如下: