06-oauth2-AuthorizationServer-02

2020-06-22  本文已影响0人  16325

之前的AuthorizationServer的文章总感觉写的不太清楚,这里新开一篇,结合具体代码再记录一下

密码验证

首先从密码验证开始,一般移动端都是直接调用认证服务的接口把密码传过去后台直接返回token,就一个交互,简单快捷。

客户端配置

authServer的ClientDetailsServiceConfigurer 的 配置

 @Override
    public void configure(ClientDetailsServiceConfigurer clients)
            throws Exception {
        clients.withClientDetails(clientDetailsService);
    }
@Bean(name = "myClientDetailsService")
    @Primary
    public ClientDetailsService clientDetailsService() throws Exception {
        InMemoryClientDetailsServiceBuilder b = new InMemoryClientDetailsServiceBuilder();
        b
                .withClient("net5ijy")
                .secret("12345678")
                .authorizedGrantTypes("password") //授权模式为password和refresh_token两种
                .scopes("all");
        return b.build();

    }

以上,配置了客户端的记录,当然也可以使用数据库方式JdbcClientDetailsService

认证端点的配置

AuthorizationServerEndpointsConfigurer的配置

@Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenServices(tokenServices)
                .tokenStore(tokenStore)
                .authorizationCodeServices(authorizationCodeServices)
                .userDetailsService(userDetailsService)
                .userApprovalHandler(userApprovalHandler())
                .authenticationManager(authenticationManager)
                ;
    }

tokenStore 处理token的保存,生成等。实现类包括InMemoryTokenStore,JdbcTokenStore,JwtTokenStore,RedisTokenStore。

tokenServices 设置tokenStore,clientDetailsService,tokenEnhancer等,是处理token的业务实现类

authorizationCodeServices,帮我们完成code的生成过程。如果你想按照自己的规则生成授权码code请自定义

userDetailsService,根据用户名查询用户信息。可以使用数据库等,自己实现查询方法

authenticationManager,认证管理器,与spring-security意义相同,使用默认即可。

UserApprovalHandler

AuthorizationServerSecurityConfigurer的配置

定义令牌端点上的安全约束

总结

经过以上的配置,就完成了password方式授权的相关配置。

上一篇下一篇

猜你喜欢

热点阅读