3、oauth2授权之自定义ClientDetailsService

        oauth的客户端凭证校验是通过ClientDetailsService来实现的。oauth默认为我们提供了InMemoryClientDetailsService和JdbcClientDetailsService,当然我们也可以自己实现ClientDetailsService。

1、新建CustomClientDetailService实现ClientDetailsService接口。

ps:这里我们需要加上@Primary把该类当成是主类,因为在@EnableAuthorizationServer注解中会引入配置类ClientDetailsServiceConfiguration,该配置类会创建一个默认的ClientDetailsService,如果不加@Primary会导致循环

@Service
@Primary
public class CustomClientDetailService implements ClientDetailsService {

    @Resource
    private PasswordEncoder passwordEncoder;

    @Override
    public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {

        BaseClientDetails clientDetails = new BaseClientDetails(clientId, "resource_id", "all,select", "authorization_code,client_credentials,refresh_token,password", "aut", "http://www.baidu.com");
        clientDetails.setClientSecret(passwordEncoder.encode("secret_" + clientId));
        return clientDetails;
    }
}

2、在认证服务中配置ClientDetailsService

@Configuration
@EnableAuthorizationServer
public static class AuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter{

    @Autowired
    private PasswordEncoder passwordEncoder;
    @Autowired
    private AuthenticationManager authenticationManager;
    @Autowired
    private UserDetailsService userDetailsService;
    @Resource
    private ClientDetailsService clientDetailsService;

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        //设置clientDetailsService
        clients.withClientDetails(clientDetailsService);
    }

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.passwordEncoder(passwordEncoder)
                //开启表单认证。创建ClientCredentialsTokenEndpointFilter对请求auth/token拦截,并获取client_id和secret进行身份认证
                .allowFormAuthenticationForClients();
    }

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

3、启用服务验证。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OAuth2协议是一种常用的身份认证授权机制,可以实现第三方应用程序获取用户授权访问受保护的资源。在实际应用中,授权页面是OAuth2流程中必不可少的一环,包括登录、注册、授权同意等过程。 但是,OAuth2标准中并没有规定如何呈现授权页面,因此每个应用程序都需要自己实现。一般来说,授权页面需要包括以下基本内容: 1. 应用程序的名称和图标,以及相关描述信息。 2. 用户登录表单,可以支持多种登录方式,如账号密码、手机号码、第三方平台账号等。 3. 用户注册表单,如果用户没有注册过,则可以在授权页面上提供注册入口。 4. 可能的风险提示,如授权后应用程序可能获取用户的某些敏感信息等。 5. 授权同意的请求,通常会列出应用程序所要获取的权限,用户需要勾选同意后才能继续进行。 为了提高用户体验和提供个性化的授权页面,OAuth2协议支持自定义授权页面。开发者可以根据自己的需求,定制属于自己应用程序的授权页面。具体实现方式包括: 1. 使用OAuth2提供的自定义UI组件,如AuthUI、SignInButton等。 2. 使用第三方库或框架实现,如Angular Material、Ant Design等。 3. 通过前端开发工具,如React、Vue、Bootstrap等,自行实现自定义授权页面。 总之,虽然OAuth2标准并没有具体规定授权页面的实现方法,但是通过自定义授权页面,可以提供更好的用户体验和更灵活的授权流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值