美文网首页
Vert.x OAuth2天坑

Vert.x OAuth2天坑

作者: Gascognya | 来源:发表于2021-12-25 17:16 被阅读0次

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

    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真的就是啥都靠手撸。

    相关文章

      网友评论

          本文标题:Vert.x OAuth2天坑

          本文链接:https://www.haomeiwen.com/subject/egwdqrtx.html