在 java 中使用的 github 的授权码通过 scribe 库

Authorization code for github used in java via scribe library

我正在尝试访问 github api(https://api.github.com/user),如抄写库示例中所述 (https://github.com/scribejava/scribejava/blob/master/scribejava-apis/src/test/java/com/github/scribejava/apis/examples/GitHubExample.java)

哪个return我这个授权url

https://github.com/login/oauth/authorize?response_type=code&client_id=156d37xxxxxxxxx&redirect_uri=http%3A%2F%2Flocalhost%3A8282%2FReportsServer%2Fsuccessful.jsp&state=secret846593

但现在我必须提供上述link示例中提到的授权码

 final Scanner in = new Scanner(System.in, "UTF-8");

            System.out.println("=== " + NETWORK_NAME + "'s OAuth Workflow ===");
            System.out.println();

            // Obtain the Authorization URL
            System.out.println("Fetching the Authorization URL...");
            final String authorizationUrl = service.getAuthorizationUrl();
            System.out.println("Got the Authorization URL!");
            System.out.println("Now go and authorize ScribeJava here:");
            System.out.println(authorizationUrl);
            System.out.println("And paste the authorization code here");
            System.out.print(">>");
            final String code = in.nextLine();
            System.out.println();

            System.out.println("And paste the state from server here. We have set 'secretState'='" + secretState + "'.");
            System.out.print(">>");
            final String value = in.nextLine();
            if (secretState.equals(value)) {
                System.out.println("State value does match!");
            } else {
                System.out.println("Ooops, state value does not match!");
                System.out.println("Expected = " + secretState);
                System.out.println("Got      = " + value);
                System.out.println();
            }

            // Trade the Request Token and Verfier for the Access Token
            System.out.println("Trading the Request Token for an Access Token...");
            final OAuth2AccessToken accessToken = service.getAccessToken(code);
            System.out.println("Got the Access Token!");
            System.out.println("(The raw response looks like this: " + accessToken.getRawResponse() + "')");
            System.out.println();

但问题是我怎样才能获得授权码,谁能告诉我授权码是什么?

到目前为止,您处于第 1 步:即,创建授权 URL 告知服务器应用程序(详细信息,例如您的客户端 ID、重定向 URL 等)

在任何 OAuth 流程中,都涉及 3 方

  1. 用户
  2. 正在请求访问令牌的应用程序
  3. 服务提供商(在本例中为Github)

假设我是您管理的网站上的 GitHub 用户。您的网站想要访问我驻留在 GitHub 上的数据。如果没有 access-token.

,您的网站无法直接从 GitHub 检索我的任何受保护数据

如何获得此访问令牌?

  • 您的网站在 GitHub 上注册为客户端并获得 client-secret
  • 每次网站需要一些用户的 access-token 时,首先它通过发送识别参数从 authorization-url 到 GitHub 来识别自己。 在您的情况下,您需要将 authorization-url 粘贴到浏览器中才能继续。在生产环境中,您的网站应将用户重定向到 authorization-url.
  • Github 然后验证网站的标识详细信息,如果一切正常,它会询问用户(在本例中为我)是否要允许您的网站访问我受保护的数据。
  • 如果我说是,GitHub 将调用您在 redirect_url 参数中指定的 URL 以及 request-token(又名 authorization-code
  • 您的网站将读取此 request-token,使服务器调用 GitHub 并与 access-token
  • 交换
  • 一旦网站获得了我的 access-token,它就可以向 GitHub 请求我的受保护数据。