spring security oauth2密码模式改造咨询
spring security oauth2默认获取token端点是/oauth/token,如何能实现新增一个端点接口用于指定clientId获取token(比如固定密码模式)?就是说这个URL请求不需要传clientId和clientSecret、grant_type,就可以返回token,用于提供给app登录使用(也就是密码模式,但是oauth2 client信息不存在app客户端)
回答:
你可以直接编写 controller,提供一个接口,在处理中添加上 client_id 和 client_secret 参数后将请求转发至原获取 token 的端点。
或者你可以使用普通的 Filter 或者在网关使用 WebFilter 实现类似的逻辑。
比如可以在网关自己实现一个给请求增加额外参数的过滤器(只是个例子):
// 省略 import@Component
public class AddParamsGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> {
@Override
public GatewayFilter apply(Object config) {
return new AddParamsFilter();
}
}
// 省略 importpublic class AddParamsFilter implements GatewayFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
URI uri = exchange.getRequest().getURI();
// 这里使用了 org.springframework.web.util.UriComponentsBuilder,实际业务请按自己需求实现
URI newUri = UriComponentsBuilder.fromUri(uri)
// 替换一些参数
.replaceQuery("client_id=gateway&response_type=code&redirect_uri=https://www.baidu.com")
.build(true)
.toUri();
ServerHttpRequest request = exchange.getRequest().mutate().uri(newUri).build();
return chain.filter(exchange.mutate().request(request).build());
}
@Override
public int getOrder() {
return 0;
}
}
# application.ymlspring:
cloud:
gateway:
routes:
- id: example
uri: lb://example-server
predicates:
- Path=/your_path
filters:
- AddParams
以上是 spring security oauth2密码模式改造咨询 的全部内容, 来源链接: utcz.com/p/944240.html