OAuth 2.0 令牌接口地址自定义
2021-03-03 21:50
162 查看
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<OAuth2AccessToken> postAccessToken(Principal principal, @RequestParam
Map<String, String> parameters){
...
return getResponse(token);
}
自定义默认获取令牌地址
如上文,默认情况下我们需要访问 /oauth/token 获取,也就是所有业务系统的 “登录”接口 都变成这个地址,如何在不重写此接口的情况下,自定义路径地址。
Spring Security OAuth2 为我们提供了丰富的 配置,我们可以在 AuthorizationServerConfigurerAdapter 设置所有内置端点 (Endpoint)路径的自定义 pathMapping
如下 使用 /pig4cloud/login 覆盖 原有的/oauth/token,「注意这里是覆盖一旦配置 原有路径将失效」
@EnableAuthorizationServer
public 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 会根据新的规则 进行路由
相关文章推荐
- yii2.0框架中自定义接口,实现类的多继承
- ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)
- 新浪微博OAuth 2.0接口简单实例例
- 使用HttpClient 访问Spring OAuth 2.0接口 获取token
- 小米帐号OAuth 2.0互通接口应用学习
- oauth 2.0标准地址
- vue使用axios 配置自定义接口地址
- OAuth 2.0 认证的原理与实践
- retrofit2.0中自定义转换器使用,通用啊
- 每个软件工程师应了解的OAuth 2.0知识
- 基于PHP构建OAuth 2.0 认证平台
- OAuth 2.0系列教程(一)引言
- 理解OAuth 2.0
- hibernate自定义主键生成策略2---关于Configurable接口继承和PersistentIdentifierGenerator常量的测试
- 使用IHttpHandler接口实现【不同路径+任意URL后缀重写到指定页面且URL地址不变】(附源码)_AX
- Asp.net 2.0 自定义控件开发[创建自定义右键PopupMenu控件][示例代码下载]
- [转载] Silverlight中使用IValueConverter接口自定义数据源显示方式
- OAuth 2.0 的四种方式
- 理解OAuth 2.0
- vue.2.0-自定义全局组件