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();

}

}

// 省略 import

public 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.yml

spring:

cloud:

gateway:

routes:

- id: example

uri: lb://example-server

predicates:

- Path=/your_path

filters:

- AddParams

以上是 spring security oauth2密码模式改造咨询 的全部内容, 来源链接: utcz.com/p/944240.html

回到顶部