柿子要挑软的捏,客户端凭证模式最简单,我们先来看看它是怎么玩的。
Client Credentials(客户端凭证模式)
好像真的简单到没什么好说的,客户端凭证模式就是只需要客户端信息,只要通过了客户端认证那一关,就能拿到令牌。(我们在之前客户端认证系列文章中,大都是用的这种模式测试)
示例
环境准备
授权服务器
基于 快速搭建一个授权服务器 文章中的示例,修改 SecurityConfiguration 中 registeredClientRepository() 方法,如下:
@Bean
public RegisteredClientRepository registeredClientRepository() {
RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString())
.clientId("client1")
.clientSecret("{noop}secret1")
// 客户端认证方式
.clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST)
// 令牌颁发方式
.authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
.build();
return new InMemoryRegisteredClientRepository(registeredClient);
}
测试
使用Postman测试,在Body栏,填入’grant_type=client_credentials
’、client_id、client_secret,发送请求。
如上,成功获取到令牌(access_token)。这就是客户端模式,就是这么简单。
源码分析
OAuth2ClientCredentialsAuthenticationConverter
判断请求参数 grant_type
的值是否为 client_credentials
,若是,则构建 OAuth2ClientCredentialsAuthenticationToken
。
OAuth2ClientCredentialsAuthenticationProvider
核心就是生成令牌,没啥了。
end