vertx auth2工作示例

时间:2017-10-04 00:03:50

标签: java oauth-2.0 vert.x

我试图从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令牌的完整流程/代码是什么?

-

我最擅长的是:

  1. 发送重定向到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();
    
  2. 当我在登录时按Enter键时,我希望收到回电...并收到... 授权码?在哪里??

  3. 所以我这样做:

               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应该是什么。这假设包含身份验证代码

    像我说的那样:一个有效的例子会很好。该文件似乎无济于事。

2 个答案:

答案 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());
        }
    });
});