Vert.x OAuth2天坑

2021-12-25  本文已影响0人  Gascognya

以下为官方文档的示例,你也可以参照

https://github.com/vert-x3/vertx-auth/blob/master/vertx-auth-oauth2/src/main/java/examples/AuthOAuth2Examples.java

OAuth2Options credentials = new OAuth2Options()
  .setFlow(OAuth2FlowType.AUTH_CODE)
  .setClientId("<client-id>")
  .setClientSecret("<client-secret>")
  .setSite("https://api.oauth.com");

OAuth2Auth oauth2 = OAuth2Auth.create(vertx, credentials);

...

JsonObject tokenConfig = new JsonObject()
  .put("code", "<code>")
  .put("redirect_uri", "http://localhost:3000/callback");

oauth2.authenticate(tokenConfig)
  .onSuccess(user -> {
    // Get the access token object
  })
  .onFailure(err -> {
    System.err.println("Access Token Error: " + err.getMessage());
  });

然后你就会发现,验证过不去。
我倒FastAPI搭的Oauth2测试服务器Debug了下



发现Vert.x发送的Oauth请求,只带了两Form参数。
这时你会问了,client id呢?client secret呢?
甚至填写了的redirect_uri也没有?

        case AUTH_CODE:
        if (authInfo.containsKey("code")) {
            cred = (new Oauth2Credentials())
                .setCode(authInfo.getString("code"))
                .setCodeVerifier(authInfo.getString("codeVerifier"))
                .setRedirectUri(authInfo.getString("redirectUri"));
            this.authenticate((Credentials)cred, handler);
            return;
        }
        break;

翻源码你会发现,vert.x这个Oauth2实现。让人一脸问号?
无论你输入多少参数,授权码模式只会传code,codeVerifier, redirectUri三个参数。
而且虽然官方示例写的是redirect_uri,代码实现是redirectUri。找得到就有鬼了。
这个可以用版本更新来解释。



但是这个我完全不知道该说什么了,一套完全没用到client_secret的Oauth2实现。。。

我的建议是Copy一下,改一改源码。
Vert.x真的就是啥都靠手撸。

上一篇 下一篇

猜你喜欢

热点阅读