google-oauth-utility

本套件為筆者為了讓Oauth Web Application認證的方法得以透過一些方式,使用refresh token來持續取回access token,讓存取google服務更方便而寫。

Installation

For command line command:

$ npm install google-oauth-utility -g

For module:

$ npm install google-oauth-utility

使用前...

在產生token前,我們需要先準備Google的Service Account持續取回access token,並透過第一次的手動認證取回Refresh Token,之後就可以透過這組Refresh Token來持續使用該使用者所授與權限的身份來存取服務...

取得Web Application Account:

請連線到:https://console.developers.google.com/project/[your-project-id]/apiui/credential 然後選取"Create new client id" > "Web application",然後依照Google Wizard操作建立Web Application Account。 Account建立後,在該Account處點選"Download JSON",並將下載檔案放置在固定位置,以便之後指定存取路徑。

產生 google oauth token file

透過套件中的gnutil指令,指定所要產出的config檔案位置,即可啟動產出token file的流程,透過web認證後,可以將auth token以json的方式記錄在指定的位置

gnutil -d [path-to-tmp-file]

Config file即上面透過產生Web Application Account後下載的JSON文件,會以下面格式顯示(name: .gauth.cfg):

{
  "CLIENT_ID":"429************kunu.apps.googleusercontent.com",
  "CLIENT_SECRET":"yq***********0A",
  "REDIRECT_URL":"http://localhost:8888/oauth2callback",
  "DEFAULT_SCOPES": [
    "https://www.googleapis.com/auth/userinfo.profile",
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/plus.me"
  ]
}

如您使用預設路徑存取(不加-d參數,則系統會到家目錄底下存取該文件),您需要指定家目錄的位置,您環境變數中必須有HOME變數,在Mac或Linux系統下,以透過export HOME=...設定,Windows中則是透過set HOME=...設定。

另外,您可以直接在參數列帶入JSON文件中的值,範例如下:

gnutil -d [path-to-tmp-file] \
    -c [your-client-id] \
  -k [your-secret-key] \
  -u [your-redirect-url] \
  -s [your-scopes]

在程式中使用google-oauth-utility

var oauth = require('google-oauth-utility');
var scopes = [ 'https://www.googleapis.com/auth/calendar',
  'https://www.googleapis.com/auth/userinfo.profile',
  'https://www.googleapis.com/auth/userinfo.email'
  ];

var opts = {
  clientId:'your-client-id',
  clientSecret:'your-client-secret',
  redirectUrl: 'your-redirect-url',
  tmpPath:'/tmp/.gauth'
};

oauth.authflow(scopes, opts, function(err, tokens){
  if(err) log.error(err);
  console.log('process end..........');
  console.log(tokens);
});

results matching ""

    No results matching ""