OAuth /oauth/token 401

最近在学习通过OAuth搭建统一授权认证的服务甚是困扰,在通过/oauth/authorize获取授权码的时候一切顺利,获取token:

### idea插件 发送POST请求,获取access_token
POST http://localhost:8081/oauth/token
Accept: */*
Cache-Control: no-cache
Content-Type: application/json;charset=UTF-8

{
  "client_id": "client_id",
  "client_secret": "client_secret",
  "grant_type": "authorization_code",
  "code": "HuhGGC",
  "redirect_uri": "http://www.baidu.com"
}

然而总是报以下错误:

{
  "timestamp": "2021-05-26T14:40:42.831+00:00",
  "status": 401,
  "error": "Unauthorized",
  "message": "",
  "path": "/oauth/token"
}

网上搜了解决方案,都是说client_idclient_secret两个参数没有给(没给这两个参数确实会报未授权),但是我的问题不是该原因导致的!

但是我们能从这个思路发现一些问题,会不会因为授权认证时确实没有给到参数。于是我在程序中写了一个过滤器,查看在进入授权认证之前查看请求的参数,发现确实没有参数

@Component
@Order(-1000)
public class TestFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        // parameterMap是空的
        Map parameterMap = request.getParameterMap();
        filterChain.doFilter(servletRequest, servletResponse);

    }
}

相信不用多说了,POST请求发送数据的方式有多种,这种以application/json请求体这种方式/oauth/token是拿不到数据的

可以通过这种方式

### 
POST http://localhost:8081/oauth/token?client_id=client_id&client_secret=client_secret&grant_type=authorization_code&code=BQJY0J&redirect_uri=http://www.baidu.com
Accept: */*
Cache-Control: no-cache

你可能感兴趣的:(OAuth /oauth/token 401)