2017-04-04 305 views

回答

0

總之,你必須登錄至少一次,谷歌身份提供JSON網絡令牌到期後每次。我不確定Goolge Drive API會持續多久,但通常這些標記可能適用於從單個請求到天的任何地方。

下面是谷歌API的OAuth2 https://developers.google.com/identity/protocols/OAuth2

文檔
  • 刷新訪問令牌,如果必要的話。
  • 訪問令牌的生命週期有限。如果您的應用程序在單個訪問令牌的生命週期之外需要訪問 以訪問Google API,則它可以通過 獲取刷新令牌。刷新令牌允許您的應用程序以 獲取新的訪問令牌。

    注:保存在安全的長期存儲刷新令牌,繼續 只要他們仍然有效地使用它們。限制適用於每個客戶端用戶發出的組合,每 用戶在所有的客戶 刷新令牌的數量,而這些限制是不同的。如果您的 應用程序請求足夠的刷新令牌以超過 限制之一,則舊的刷新令牌停止工作。

    Google提供了一個快速入門指南,用於通過Google Apis實現用戶簽名。 Google使用您必須在Google中註冊爲客戶端應用程序的OAuth2協議。一旦註冊爲客戶端應用程序,您將獲得一個客戶端ID,您通常會以某種形式的應用程序初始化向您的應用程序提供該ID。

    這裏是他們的快速入門指南的鏈接,這將幫助你開始: https://developers.google.com/drive/v3/web/quickstart/js

    注意,這是一個不演示如何可能接近持久化JSON網絡令牌一個基本的例子,使用戶不必在每個請求上登錄。我概述了一種管理JavaScript和Angular中的身份驗證的簡單方法,可以讓您朝着正確的方向前進,但方向不完整。

    例如,在角:

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

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

    凡configureApp和runApp是處理在AngularJS框架應用程序初始化JS功能。以下示例中的代碼將從其自己的應用的REST API中檢索Google Apps Client 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應用程序。這種方法可以應用於其他JS框架,如React和Backbone。

    爲了突出文檔中的另一個角度,updateSigninStatus將是一個很好的地方,可以捕獲Google授權請求返回的JSON Web令牌,此時您可以將此令牌存儲在瀏覽器的window.localStorage中以供重用。

    只要Google API需要驗證,您就可以重複使用令牌。代幣通常有一個到期。在令牌到期之前,您將能夠阻止API顯示登錄模式。

    這確實意味着您仍然必須使用此方法來管理授權過程背後的邏輯,監控來自Google的任何請求令牌刷新或重新認證的響應。

    Auth0是一個很好的身份驗證和授權插件,提供多種語言用於連接Google和許多其他OAuth2身份提供商。 Google Drive API使用他們自己的身份提供商服務,根據您註冊的應用的客戶端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我確保在第一段中回答他的問題,指出用戶每次JSON Web令牌或刷新令牌過期時都必須至少登錄一次。這篇文章的其餘部分解釋了爲什麼以及如何創建一種機制,以減少初次登錄後的模態彈出登錄 – Matt

    +0

    當然,但我的理解是,用戶訪問他們自己的Google帳戶時,他希望所有用戶訪問一個共同的帳戶。因此他正在尋找一種方法來避免用戶必須知道通用帳戶的用戶名和密碼。這可以通過集中存儲的刷新令牌來實現。 – pinoyyid

    0

    您是說所有用戶登錄到同一Google帳戶?

    在這種情況下,您有2個選項。

    1 /編寫一個具有存儲的刷新令牌的服務器應用程序。創建一個允許經過身份驗證的用戶請求訪問令牌的端點。在JavaScript

    2 /嵌入刷新令牌,但要確保只有經過身份驗證的用戶可以加載JS

    +0

    您可以舉個例子嗎? – Aurovrata

    +1

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

    相關問題