2017-04-04 10 views
0

자바 스크립트 Google 드라이브 API를 통해 내 Google 드라이브에서 스크립트를 실행하려고합니다. 이 작업은 정상적으로 작동하지만 열리는 팝업에서 내 계정에 로그인해야만 작동합니다. 나는 매번 같은 계정에 로그인하고 싶기 때문에 사용자가 로그인 정보를 입력하지 않아도되는 것을 피하기 위해 로그인을 자동화 할 수있는 방법이 있는지 궁금해하고 있습니다.자바 스크립트 Google 드라이브 API를 통해 특정 Google 드라이브 계정에 로그인하는 방법

답변

0

즉, Google Identity Provider JSON 웹 토큰이 만료 될 때마다 한 번 이상 로그인해야합니다. Goolge Drive API로 얼마나 걸릴지 확신 할 수 없지만 일반적으로 이러한 토큰은 단일 요청에서부터 며칠 동안 유효한 것입니다. 여기

은 구글 API OAuth2를 https://developers.google.com/identity/protocols/OAuth2

에 대한 문서는 <안녕, 시작 = "4"> 필요한 경우
  • 는, 액세스 토큰을 새로 고칩니다.
  • 액세스 토큰의 수명은 제한적입니다. 애플리케이션이 단일 액세스 토큰의 유효 기간을 지나서 에 Google API에 액세스해야하는 경우 새로 고침 토큰을 얻을 수 있습니다. 새로 고침 토큰을 사용하면 응용 프로그램에서 에 새 액세스 토큰을 얻을 수 있습니다.

    참고 : 보안 장기 보관함에 새로 고침 토큰을 저장하고 은 유효 기간 동안 계속 사용하십시오. 제한은 클라이언트 - 사용자 조합 당 발행 된 새로 고치기 토큰 수에 적용되며 모든 클라이언트에서 사용자 당 적용됩니다. 이러한 제한은 다릅니다. 응용 프로그램이 한계 중 하나 이상으로 이동하기에 충분한 새로 고침 토큰을 요청하면 이전 새로 고침 토큰이 작동을 멈 춥니 다.

    Google은 Google Apis를 통해 사용자 로그인을 구현하는 빠른 시작 가이드를 제공했습니다. Google은 클라이언트 애플리케이션으로 Google에 등록해야하는 OAuth2 프로토콜을 사용합니다. 클라이언트 응용 프로그램으로 등록되면 일반적으로 응용 프로그램 초기화의 일부 형식으로 응용 프로그램에 제공하는 클라이언트 ID가 발급됩니다. 여기

    이 도움이 될 것이라고 자신의 빠른 시작 가이드에 대한 링크입니다 : 이것은 당신이 JSON 웹 토큰을 지속에 접근 할 수 방법을 보여 않는 기본 예제입니다 https://developers.google.com/drive/v3/web/quickstart/js

    주 사용자 있도록 모든 요청에 ​​로그인 할 필요는 없습니다. 필자는 올바른 방향으로, 그러나 불완전한 방향으로 나아갈 수 있도록 JavaScript 및 각도로 인증을 관리하는 간단한 방법에 대해 설명합니다. 각도, 예를 들어

    :

    // Configures the required variables before Running an Instance of the App  
    angular.module("yourModuleName").config(configureApp); 
    

    AND configureApp 및 runApp가 AngularJS 및 프레임 워크 애플리케이션 초기화 처리 JS 함수이다

    // Executed when the App Instance launches, allowing you to connect to Google APIs when the App starts  
    angular.module("yourModuleName").run(runApp); 
    

    . 다음 코드의 코드는 자체 앱의 REST API에서 앱 Google 클라이언트 ID를 검색합니다.이것은 당신이 저장에서 이러한 자격 증명을 검색 할 수있는 곳의 예에 불과하지만, 가장 가능성이 가장 안전한 예되지 않습니다 : 원하는 응용 프로그램 수명주기에 따라 달라 각도로 사용하는 기능을

    var configureApp = function($http,$window) { 
        // Setup your CLIENT ID from your own REST API (or any other mechanism you may choose) 
        var httpPromise = $http.get("http://myApp.myDomain.com/config/googleClient"); 
        // Handle the Response from the above GET Request 
        httpPromise.then(
         // Handle Success 
         function(response) { 
          // Store the CLIENT ID in local storage for example 
          $window.localStorage.setItem("GOOGLE_API_CLIENT_ID", response.data.clientId); 
          // Setup the App Wide variables for Google API 
          // Client ID and API key from the Developer Console 
          var CLIENT_ID = response.data.clientId; 
    
          // Array of API discovery doc URLs for APIs used by the quickstart 
          var DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"]; 
    
         // Authorization scopes required by the API; multiple scopes can be 
         // included, separated by spaces. 
         var SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly'; 
    
        // Do more initialization configuration 
    }; 
    
    var runApp = function() { 
        // Initialize the API 
        gapi.client.init({ 
          discoveryDocs: DISCOVERY_DOCS, 
          clientId: CLIENT_ID, 
          scope: SCOPES 
         }).then(function() { 
          // Listen for sign-in state changes. 
          gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus); 
    
          // Handle the initial sign-in state. 
          updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get()); 
          authorizeButton.onclick = handleAuthClick; 
          signoutButton.onclick = handleSignoutClick; 
         }); 
    } 
    

    은 당신이 목표로해야합니다 Angularjs 앱. 이 접근법은 React와 Backbone과 같은 다른 JS 프레임 워크에 적용될 수 있습니다.

    updateSigninStatus은 문서의 또 다른 퍼스펙티브를 강조하기 위해 브라우저의 window.localStorage에이 토큰을 저장할 수있는 Google 인증 요청에 의해 반환 된 JSON 웹 토큰을 캡처 할 수있는 좋은 장소가 될 것입니다.

    그러면 Google API가 인증을 요구할 때마다 토큰을 다시 사용할 수 있습니다. 토큰은 일반적으로 만료됩니다. 토큰이 만료 될 때까지는 API가 로그인 모달을 표시하지 못하게 할 수 있습니다.

    이것은 토큰 새로 고침 또는 재 인증을 요청하는 Google의 응답을 모니터링하면서이 접근법을 사용하여 권한 부여 프로세스의 논리를 관리해야한다는 것을 의미합니다.

    Auth0은 Google 및 다른 많은 OAuth2 ID 제공 업체와 연결하기 위해 여러 언어로 제공되는 훌륭한 인증 및 승인 플러그인입니다. Google 드라이브 API는 자체 ID 제공 업체 서비스를 사용하여 등록 된 앱의 클라이언트 ID와 함께 앱 사용자의 신원을 확인합니다. 당신은 모든 사용자가 동일한 로그인 것을 말하고있다 https://jwt.io/ https://auth0.com/ Best practices for authentication and authorization in Angular without breaking RESTful principles? https://thinkster.io/tutorials/angularjs-jwt-auth

    +1

    이 답변에 어떤 좋은 물건을로드 할 수 있는지 확인합니다,하지만 난 그것이 OP의 질문 – pinoyyid

    +0

    @pinoyyid의 I를 해결 생각하지 않는다/JSON 웹 토큰 또는 새로 고치기 토큰이 만료 될 때마다 적어도 한 번 이상 로그인해야한다는 첫 번째 단락에서 질문에 답변했습니다. 나머지 게시물은 최초 로그인 후 모달 팝업 로그인을 줄이기위한 메커니즘을 만드는 이유와 방법을 설명합니다. – Matt

    +0

    물론, 사용자는 자신의 Google 계정에 액세스하는 대신 모든 사용자가 하나의 공통 계정에 액세스하기를 바랍니다. 계정. 따라서 그는 사용자가 공통 계정의 사용자 이름과 암호를 알지 못하게하는 방법을 찾고 있습니다. 중앙 집중적으로 저장된 새로 고침 토큰을 사용하면이 작업을 수행 할 수 있습니다. – pinoyyid

    0

    :

    다음은 구글 ID 공급자를 사용하여 인증을 구현하기 위해 나에게 필요한 프로젝트에 대한 인증을 구현할 때 내가 찾은 링크입니다 Google 계정?

    두 가지 옵션이 있습니다.

    1/저장된 새로 고침 토큰이있는 서버 응용 프로그램을 작성하십시오. 인증 된 사용자가 액세스 토큰을 요청할 수 있도록하는 끝점을 만듭니다.

    2는 자바 스크립트에서 새로 고침 토큰을 포함하지만, 인증 된 사용자 만이 JS

    +0

    인 예를들 수 있습니까? – Aurovrata

    +1

    https://stackoverflow.com/questions/19766912/how-do-i-authorise-an-app-web-or-installed-without-user-intervention-canonic – pinoyyid