2014-11-18 7 views
0

이번 주에는 개발할 작은 프로그램이 있었지만 localhost에서 Java Servlet을 사용하여 웹 응용 프로그램을 만들어야했습니다.이 웹 응용 프로그램은 다음을 수행해야합니다.Google 작업으로 인증 할 수 없습니다 - 숙제

  • REST
에게 사용 문제에서 기본 작업 목록에 구글 작업 만들기 (OAuth를 2.0)
  • 오픈 ID 연결을 통해 인증을 확보하십시오 및 GitHub의에서 공공 기관에서 문제를 보여 10,403,210 주 : 나는 단지 바로 GitHub의 API에 요청했습니다, HTTP,


    첫 번째 부분은 쉬웠다없는 항아리 libs와를 사용하여 JSON, 여기에 아무 문제


    을 구문 분석 할 수 두 번째 부분은 다소 쉽습니다. 콜백을 설정하고 코드를 수신 할 수있는 Google 개발자 콘솔에서 새 클라이언트 ID를 만들어야했습니다. 문제가 발생한 경우를 대비하여 여기에 넣을 것입니다. 그것 :

    Login.java

    ... 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
        System.out.println("--New login request was received --");   
        resp.setStatus(302); 
        resp.setHeader("Location", GoogleStuff.AUTH_LINK); 
    } 
    ... 
    

    callback.java

    ... 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
        Cookie c = new Cookie("googleCode", req.getParameter("code")); c.setMaxAge(60*60); //1 Hour 
        //Example code received from Google 
        //4/6POIUYwZA3tFCnX_2feRDGiPMQOU7At8HyfOzemMkOY.wtiPpsElo8wZoiIBeR5Q2m9sqEaFkwI 
        resp.addCookie(c); 
        resp.setStatus(302); 
        resp.setHeader("Location","searchOrg"); 
    } 
    ... 
    
    내 문제는 세 번째 부분에 제공

    , 나는 구글 (인증 안) 401 응답 코드를 얻을 , 나는 난 확신


    뭔가 잘못하고 있지만, 나는 무엇이 잘못되었는지를 정말로 모른다. 이것은 잘못된 모든 아마, 그래서 그것을 참아 : P

    참고 : 나는 구글 개발자 콘솔을 사용

    ... 
    public static String AUTH_LINK = "https://accounts.google.com/o/oauth2/auth?"+ 
               "scope=https://www.googleapis.com/auth/tasks&"+ 
               "redirect_uri=http://localhost:5005/callback&"+ 
               "response_type=code&" + 
               "client_id=" + FirstHttpServer.CLIENT_ID + 
               "&approval_prompt=force"; 
    ... 
    public static void addTask(Issue i, String googleCode){ 
        try { 
         String postURL = "https://www.googleapis.com/tasks/v1/lists/%40default/tasks?key=" + MyServer.API_KEY; 
         URL url = new URL(postURL); 
         HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
         connection.setDoOutput(true); 
         connection.setRequestMethod("POST"); 
         connection.setRequestProperty("Content-Type", "application/json"); 
         connection.setRequestProperty("Authorization", googleCode); 
         BufferedWriter httpRequestBodyWriter = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); 
         httpRequestBodyWriter.write(i.toJson()); 
         httpRequestBodyWriter.close(); 
         Scanner httpResponseScanner = new Scanner(connection.getInputStream()); 
         while(httpResponseScanner.hasNextLine()) 
          System.out.println(httpResponseScanner.nextLine()); 
         httpResponseScanner.close(); 
        } catch (IOException e) { 
         System.out.println(e.toString()); 
         throw new RuntimeException(); 
        } 
    
    GoogleStuff.java

    브라우저

    에 대한 키를 생성 한 API 키를 얻으려면

    나는 며칠 동안 그 일을 해왔다. 그러나 다른 프로젝트들도 내 시간을 바짝 두들겨서이 문제를 발견하는 것이 점점 힘들어졌다. 나는 당신의 도움을 요청하는 이유 다. :)

    미리 감사드립니다.

  • +0

    저는 Google 할 일을 도와 드릴 전문 지식이 없지만 StackOverflow에 오신 것을 환영하며 첫 번째 질문에 당신을 칭찬한다는 의견을 말씀드립니다 - 훌륭한 형식을 가지고 있으며 문제를 직접 풀어보고 잘했음을 보여 줬습니다! –

    +1

    멋진 단어를 보내 주셔서 감사 드리며 몇 분 동안 포맷팅으로 놀아 보면서 모든 것을 이해하기 쉬웠습니다.내 질문에 답하는 데 약간의 시간을 허비한다면, 다른 사람들을 위해 가능한 한 쉽게 만들기 위해 내 것을 사용하는 것이 좋습니다. –

    답변

    0

    API는 401 상태 코드를 리턴 할 때 액세스 토큰이 만료되었음을 나타냅니다. 새 액세스 토큰을 얻으려면 토큰 엔드 포인트에 요청하고 client_id, client_secret, refresh_token 및 grant_type 매개 변수를 포함하십시오.

    자세한 내용은 link에서 확인할 수 있습니다.

    희망 하시겠습니까?