我试图从vert.x
官方文档中至少做一些事情。
究竟是什么意思here
代码:
String code = "xxxxxxxxxxxxxxxxxxxxxxxx"; // the code is provided as a url parameter by github callback call
oauth2.getToken(new JsonObject().put("code", code).put("redirect_uri", "http://localhost:8080/callback"), res -> {
if (res.failed()) {
// error, the code provided is not valid
} else {
// save the token and continue...
}
});
我从那里相信
https://developers.google.com/identity/protocols/OAuth2,
授权流程:
我想向github / google发送授权代码以获取访问令牌(这是我的最终目标)。那个代码是授权代码吗?
我想接收该代码,我需要首先发送我的用户/凭据作为第一步?似乎错过了这一步。
问题是..例如,获取github的oauth令牌的完整流程/代码是什么?
-
我最擅长的是:
发送重定向到github登录页面发送我的凭据和如何回电给我的说明(我的服务器应用程序上的/ auth-callback url)
oauth2 = GithubAuth.create(vertx, clientId, applicationSecret);
final String authorizationURI = oauth2.authorizeURL(new JsonObject()
.put("redirect_uri", DOMAIN + ":" + PORT + "/auth-callback")
.put("scope", "notifications")
.put("state", "3(#0/!~"));
context.response().putHeader("Location", authorizationURI)
.setStatusCode(302)
.end();
当我在登录时按Enter键时,我希望收到回电...并收到... 授权码?在哪里??
所以我这样做:
router.get("/auth-callback/").handler( (RoutingContext context) -> {
oauth2.getToken(tokenConfig, res -> {
if (res.failed()) {
System.err.println("Access Token Error: " + res.cause().getMessage());
} else {
System.out.println("Got access");
// Get the access token object (the authorization code is given from the previous step).
final AccessToken token = res.result();
System.out.println("Got a token! " + token.toString());
}
});
}
);
所以..结果我永远不会被这个网址回叫。似乎是因为.get(..与/ auth-callback& scope = notifications& state = ..等所有param都不匹配。什么是正确的.get?
tokenConfig应该是什么。这假设包含身份验证代码?
像我说的那样:一个有效的例子会很好。该文件似乎无济于事。答案 0 :(得分:3)
Oauth2指定了几个流来获取令牌。最常见的是访问代码和密码流。使用交互式Web应用程序(需要用户交互,而不是api端点)时,您可能希望使用访问代码流程(简称代码)。
在此流程中,您需要遵循一个序列才能获得令牌。 GitHub的详细教程可以在这里看到:
http://vertx-tutorials.jetdrone.xyz/tutorials/oauth2/github/
答案 1 :(得分:1)
tokenConfig
是一个JsonObject,它将包含您的代码和redirect_uri。
试试这段代码,它对我有用:
router.get("/login").handler(routingContext -> {
routingContext.response().putHeader("Location", authorizationURI)
.setStatusCode(302)
.end();
});
router.get("/auth-callback").handler(routingContext -> {
JsonObject tokenConfig = new JsonObject();
tokenConfig.put("code", routingContext.request().params().get("code"));
tokenConfig.put("redirect_uri", authorizationURI);
oauth2.getToken(tokenConfig, res -> {
if (res.failed()) {
System.err.println("Access Token Error: " + res.cause().getMessage());
} else {
System.out.println("Got access");
// Get the access token object (the authorization code is given from the previous step).
final AccessToken token = res.result();
System.out.println("Got a token! " + token.toString());
}
});
});