keycloak~自定义directgrant直接认证
direct grant我们把它理解为通过rest接口直接认证,这是oauth2里的密码认证方式,即 grant_type=password
,它不需要走授权码这种复杂的流程,相当于传统的表单认证;keycloak事实上为我们准备了一个direct grant,只不过它只能使用username和password进行认证,如果你希望使用email,phoneNumber来进行密码认证,则需要另外去开发,下面就是开发的步骤:
-
添加provider和providerFactory
你的SelfDirectGrantAuthenticator需要继承AbstractUsernameFormAuthenticator,当然继承Authenticator也是可以的,因为我们并不需要进行表单交互。
public class V6DirectGrantAuthenticator extends AbstractUsernameFormAuthenticator { KeycloakSession session; public V6DirectGrantAuthenticator(KeycloakSession session) { this.session = session; } @Override public void authenticate(AuthenticationFlowContext context) { String username = Optional.ofNullable(context.getHttpRequest().getDecodedFormParameters().getFirst("username")) .orElse(context.getHttpRequest().getDecodedFormParameters().getFirst("username")); String password = Optional.ofNullable(context.getHttpRequest().getDecodedFormParameters().getFirst("password")) .orElse(context.getHttpRequest().getDecodedFormParameters().getFirst("password")); if (用户名密码==正确) { context.success(); } } @Override public void action(AuthenticationFlowContext context) { authenticate(context); } }
-
注册到org.keycloak.authentication.AuthenticatorFactory
-
keycloak管理平台,添加验证,可以从默认的direct grant上复制
-
将直接认证流程改成刚刚建立的
-
现在就可以在postman里,脱离浏览器,进行认证了,并直接返回access_token
「其他文章」
- java~Optional语法糖
- Java~公用包中如何加载资源文件
- [email protected]一切为了可扩展性
- rsa~对接第三方rsa问题排查
- keycloak~自定义directgrant直接认证
- java~RMI引起的log4j漏洞
- k8s~Endpoints的使用之负载均衡
- keycloak~uma远程资源授权对接asp.net core
- es~存储部分字段
- maven编译后复制到目标位置
- keycloak~缓存的使用
- keycloak~授权功能的使用
- java~并行计算~大集合的并行处理
- keycloak~使用JDBC_PING实现k8s里的高可用
- keycloak~为认证提供者添加配置项
- skywalking的介绍
- springboot~disruptor异步队列
- keycloak~自定义rest接口
- springcloud~feign POST form-url-encoded data
- js~ajax获取后端HTTP状态的几种情况