以下为官方文档的示例,你也可以参照
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真的就是啥都靠手撸。