在Vertx中 - 如何进行回调?

时间:2016-09-28 09:26:50

标签: java vert.x oauth2

我遇到Vertx oauth2的问题。

我遵循了本教程http://vertx.io/docs/vertx-web/java/#_oauth2authhandler_handler

OAuth2Auth authProvider = OAuth2Auth.create(vertx, OAuth2FlowType.AUTH_CODE, new OAuth2ClientOptions()
    .setClientID("CLIENT_ID")
    .setClientSecret("CLIENT_SECRET")
    .setSite("https://github.com/login")
    .setTokenPath("/oauth/access_token")
    .setAuthorizationPath("/oauth/authorize"));

// create a oauth2 handler on our domain: "http://localhost:8080"
OAuth2AuthHandler oauth2 = OAuth2AuthHandler.create(authProvider, "http://localhost:8080");

// setup the callback handler for receiving the GitHub callback
oauth2.setupCallback(router.get("/callback"));

// protect everything under /protected
router.route("/protected/*").handler(oauth2);
// mount some handler under the protected zone
router.route("/protected/somepage").handler(rc -> {
  rc.response().end("Welcome to the protected resource!");
});

// welcome page
router.get("/").handler(ctx -> {
  ctx.response().putHeader("content-type", "text/html").end("Hello<br><a href=\"/protected/somepage\">Protected by Github</a>");
});

这些想法是在受保护的文件夹中包含需要身份验证的所有网页 当我想访问受保护的网页时,我被重定向到微软登录站点,登录后我被重定向到我的回调。

我不明白现在如何处理回调? 我得到这样的回复:

https://localhost:8080/callback?code=AAABAAA...km1IgAA&session_state=....

我是如何理解的(https://blog.mastykarz.nl/building-applications-office-365-apis-any-platform/)我需要以某种方式提取代码和会话状态,然后将帖子发回给:

https://login.microsoftonline.com/common/oauth2/token 

以获取令牌。

但我不明白如何用Vertx做到这一点。 有帮助吗?如何提取代码和会话并发送回Microsoft?

我在这里找到了一些教程:https://github.com/vert-x3/vertx-auth/blob/master/vertx-auth-oauth2/src/main/java/examples/AuthOAuth2Examples.java但没有帮助我。

我使用Azure身份验证执行此操作(在教程中编写了Github,但我将所有这些更改为Microsoft)。

2 个答案:

答案 0 :(得分:0)

你是代理人吗?回调处理程序从应用程序向提供程序发送请求,而不是从浏览器发送请求。对我来说这冻结了整个应用程序。您可以使用OAuth2Auth.create

的OAuth2ClientOptions设置代理

答案 1 :(得分:0)

official vert.x-web document中所述,auth流的处理(包括对Microsoft的访问令牌请求)由OAuth2AuthHandler处理:

  

OAuth2AuthHandler将设置适当的回调OAuth2处理程序,因此用户无需处理对授权服务器响应的验证。

这就是说,不需要应用程序手动处理它。代替使用来自vertx-auth的示例,请尝试使用this one,它实际上使用的是OAuth2AuthHandler。