authorizedgranttypes 的详细阐述

一、authorizedgranttypes定义

在OAuth2.0框架中,authorizedgranttypes是一个用来定义Client可以使用哪种授权类型的参数,授权类型包括:authorization_code、implicit、password、client_credentials、refresh_token。

具体来说:client_id和client_secret是client验证授权的基础,但是,client只授权自己的用户。使用不同的授权类型,client能够在用户授权之前获取access_token,并且在之后使用它。因此,根据不同的业务需求,对授权类型的选择需要慎重考虑,以确保安全、可靠、有效

二、授权类型的分类

下面将对五种不同的授权类型进行详细阐述:

1. authorization code授权类型

授权码类似于一次性密码,用于获取access token的中间步骤。

使用授权码类型进行授权的基本方式:用户访问客户端的应用程序;应用程序将用户重定向到认证服务器;用户输入其凭据;认证服务器将用户重定向到应用程序,并提供授权码;应用程序将授权码与简化令牌请求一起发送给认证服务器;认证服务器将访问令牌发送回应用程序。

2. implicit授权类型

Implicit类型是一种简化的授权,它给客户端访问使用者数据的权限,跳过了请求令牌的那个过程。相比之下,口令和授权码的类型需要向服务器申请一个令牌,该令牌可以用于授权和访问受保护的资源。这种方式比授权码安全性低,除非请求是HTTPs即可避免音译攻击。

3. password授权类型

通过用户名和密码认证信息向认证服务器处获取访问令牌的方式。

当资源所有者知道你的Client并信任你时,您才应该采用这种授权类型,因此,请在服务器之间禁用此授权类型。

4. client credentials授权类型

client credentials授权类型允许客户端获得访问资源者受保护资源的权限,而无需资源所有者的授权。在应用程序调用模式中,客户端是传统的应用程序,没有用户交互界面或IAM情境。

5. refresh token授权类型

当access token即将过期时,可能会使用授权中提供的refresh token来获得新的access token。

三、Smallbee公司的实例

下面是Smallbee公司的一个应用实例,这个应用程序选择了两个授权类型,即authorization_code和client_credentials,用于获取授权和使用API resources证书。

    @Bean
public ClientDetailsService JdbcClientDetailsService() {
return new JdbcClientDetailsService(dataSource);
}
@Bean
public TokenStore tokenStore() {
return new JdbcTokenStore(dataSource);
}

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.withClientDetails(JdbcClientDetailsService());
}

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.tokenServices(tokenServices())// 配置 TokenServices 参数
.authenticationManager(authenticationManager)// 用于支持 password 授权类型
.userDetailsService(userDetailsService);// 配置 UserDetailsService
endpoints.tokenGranter(tokenGranter(endpoints));
}

@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.allowFormAuthenticationForClients();
}

// 配置 tokenServices 参数
@Bean
public AuthorizationServerTokenServices tokenServices() {
DefaultTokenServices services = new DefaultTokenServices();
services.setAccessTokenValiditySeconds(access_token_expiration_time);
services.setRefreshTokenValiditySeconds(refresh_token_expiration_time);
services.setTokenStore(tokenStore());
services.setSupportRefreshToken(refresh_token_enabled);
services.setClientDetailsService(JdbcClientDetailsService());
return services;
}

// 配置授权类型和确切可用的 token 信息
@Bean
public TokenGranter tokenGranter(final AuthorizationServerEndpointsConfigurer endpoints) {
List granters = new ArrayList();
granters.add(new AuthorizationCodeTokenGranter(endpoints.getTokenServices(), endpoints.getAuthorizationCodeServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
granters.add(new ImplicitTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
granters.add(new RefreshTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
granters.add(new ClientCredentialsTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
granters.add(new ResourceOwnerPasswordTokenGranter(authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
return new CompositeTokenGranter(granters);
}

四、结语

authorizedgranttypes是OAuth2.0框架中一个非常重要的参数,它定义了Client可以使用的授权类型,根据不同的授权要求,选择不同的授权类型来保证应用的安全、可靠和有效。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/237058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:03
下一篇 2024-12-12 12:03

相关推荐

  • index.html怎么打开 – 详细解析

    一、index.html怎么打开看 1、如果你已经拥有了index.html文件,那么你可以直接使用任何一个现代浏览器打开index.html文件,比如Google Chrome、…

    编程 2025-04-25
  • Resetful API的详细阐述

    一、Resetful API简介 Resetful(REpresentational State Transfer)是一种基于HTTP协议的Web API设计风格,它是一种轻量级的…

    编程 2025-04-25
  • neo4j菜鸟教程详细阐述

    一、neo4j介绍 neo4j是一种图形数据库,以实现高效的图操作为设计目标。neo4j使用图形模型来存储数据,数据的表述方式类似于实际世界中的网络。neo4j具有高效的读和写操作…

    编程 2025-04-25
  • AXI DMA的详细阐述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基于AMBA…

    编程 2025-04-25
  • 关键路径的详细阐述

    关键路径是项目管理中非常重要的一个概念,它通常指的是项目中最长的一条路径,它决定了整个项目的完成时间。在这篇文章中,我们将从多个方面对关键路径做详细的阐述。 一、概念 关键路径是指…

    编程 2025-04-25
  • c++ explicit的详细阐述

    一、explicit的作用 在C++中,explicit关键字可以在构造函数声明前加上,防止编译器进行自动类型转换,强制要求调用者必须强制类型转换才能调用该函数,避免了将一个参数类…

    编程 2025-04-25
  • HTMLButton属性及其详细阐述

    一、button属性介绍 button属性是HTML5新增的属性,表示指定文本框拥有可供点击的按钮。该属性包括以下几个取值: 按钮文本 提交 重置 其中,type属性表示按钮类型,…

    编程 2025-04-25
  • crontab测试的详细阐述

    一、crontab的概念 1、crontab是什么:crontab是linux操作系统中实现定时任务的程序,它能够定时执行与系统预设时间相符的指定任务。 2、crontab的使用场…

    编程 2025-04-25
  • Vim使用教程详细指南

    一、Vim使用教程 Vim是一个高度可定制的文本编辑器,可以在Linux,Mac和Windows等不同的平台上运行。它具有快速移动,复制,粘贴,查找和替换等强大功能,尤其在面对大型…

    编程 2025-04-25
  • 网站测试工具的详细阐述

    一、测试工具的概述 在软件开发的过程中,测试工具是一个非常重要的环节。测试工具可以快速、有效地检测软件中的缺陷,提高软件的质量和稳定性。与此同时,测试工具还可以提高软件开发的效率,…

    编程 2025-04-25

发表回复

登录后才能评论