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

时间:2018-03-12 10:53:05

标签: java oauth scribe

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

将此授权网址返回给我

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

但现在我必须提供上面链接示例中提到的授权码

 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 个答案:

答案 0 :(得分:1)

enter image description here

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

在任何OAuth流程中,共有3方参与

  1. 用户
  2. 请求访问令牌的应用
  3. 服务提供商(本例中为Github)
  4. 假设我是您管理的网站上的GitHub用户。您的网站想要访问驻留在GitHub上的数据。如果没有access-token,您的网站无法直接从GitHub检索我的任何受保护数据。

    如何获得此访问令牌?

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