thinksns 如何自定义接口_Spring Security OAuth 2.0 发放令牌接口地址自定义

OAuth 2.0 如何获取令牌

  • 以密码模式为例,获取 Token
curl --location --request POST 'http://oauth-server/oauth/token' --header 'Authorization: Basic dGVzdDp0ZXN0' --data-urlencode 'username=admin' --data-urlencode 'password=123456' --data-urlencode 'scope=server' --data-urlencode 'grant_type=password'
  {   "access_token":"2YotnFZFEjr1zCsicMWpAA",   "token_type":"example",   "expires_in":3600,   "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",   "example_parameter":"example_value" }
  • 原流程其实去访问 OAuth 2.0 提供的 /oauth/token 源码如下

TokenEndpoint.postAccessToken

@RequestMapping(value = "/oauth/token", method=RequestMethod.POST)public ResponseEntity postAccessToken(Principal principal, @RequestParamMap parameters){  ...  return getResponse(token);}

自定义默认获取令牌地址

  • 如上文,默认情况下我们需要访问 /oauth/token 获取,也就是所有业务系统的 “登录”接口 都变成这个地址,如何在不重写此接口的情况下,自定义路径地址。
  • Spring Security OAuth2 为我们提供了丰富的 配置,我们可以在 AuthorizationServerConfigurerAdapter 设置所有内置端点 (Endpoint)路径的自定义 pathMapping
  • 如下 使用 /pig4cloud/login 覆盖 原有的/oauth/token,注意这里是覆盖一旦配置 原有路径将失效
@EnableAuthorizationServerpublic class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {    @Override    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {        endpoints                .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)                .pathMapping("/oauth/token","/pig4cloud/login");    }}
  • 获取令牌地址就变成如下
curl --location --request POST 'http://oauth-server/pig4cloud/login' --header 'Authorization: Basic dGVzdDp0ZXN0' --data-urlencode 'username=admin' --data-urlencode 'password=123456' --data-urlencode 'scope=server' --data-urlencode 'grant_type=password'

源码剖析

  • spring security oauth2 是如何实现 这种端点自定义配置的呢?
  • AuthorizationServerEndpointsConfigurer 被写入到自定义 HandlerMapping
private FrameworkEndpointHandlerMapping frameworkEndpointHandlerMapping() {  if (frameworkEndpointHandlerMapping == null) {    frameworkEndpointHandlerMapping = new FrameworkEndpointHandlerMapping();    frameworkEndpointHandlerMapping.setMappings(patternMap);    frameworkEndpointHandlerMapping.setPrefix(prefix);    frameworkEndpointHandlerMapping.setInterceptors(interceptors.toArray());  }  return frameworkEndpointHandlerMapping;}
  • SpringMVC DispatcherServlet 会根据新的规则 进行路由
07a1bef19bbf87b323162281c7a8c744.png
b395c3a19e16b4aae20b025554edfe5d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值