【问题标题】:Microsoft Graph API with Simple-OAuth2 and Client Credentials Flow具有 Simple-OAuth2 和客户端凭据流的 Microsoft Graph API
【发布时间】:2019-04-03 18:30:35
【问题描述】:

我正在尝试在 NodeJS 网站中使用 Simple-OAuth2 的客户端凭据流记录用户。

我的 routes/index.js 是这样的:

var express = require('express');
var router = express.Router();
var authHelper = require('../helpers/auth');

router.get('/', async function(req, res, next) {
  let parms = { title: 'Home', active: { home: true } };
  const accessToken = await authHelper.accessToken;
  res.render('index', parms);
});

module.exports = router;

我的 auth.js 是这样的:

const credentials = {
  client: {
    id: process.env.APP_ID,
    secret: process.env.APP_PASSWORD,
  },
  auth: {
    tokenHost: 'https://login.microsoftonline.com',
    authorizePath: "common/oauth2/v2.0/authorize",
    tokenPath: "common/oauth2/v2.0/token",
  }
};
const oauth2 = require('simple-oauth2').create(credentials);

const tokenConfig = {
  username: 'uuuuuu@dddddd.com',
  password: 'ppppppp',
  scope: process.env.APP_SCOPES,
};

try {
  const result = await oauth2.ownerPassword.getToken(tokenConfig);
  const accessToken = oauth2.accessToken.create(result);
} catch (error) {
  console.log('Access Token Error', error.message);
}
exports.accessToken = accessToken;

当我尝试启动网站时,nodejs 向我显示了一个 sintax 错误:

const result = await oauth2.ownerPassword.getToken(tokenConfig);
               ^^^^^
SyntaxError: await is only valid in async function

这个错误对我来说没有多大意义,因为代码是由 simple-oauth2 提供的。

有人能说明我的实际错误吗?

【问题讨论】:

    标签: node.js oauth-2.0 microsoft-graph-api


    【解决方案1】:

    您必须将代码包装到async 函数中,这样您才能在该函数中使用await 关键字。你可以找到更多信息here

    在您的情况下,我会将代码包装到函数中并像这样导出该函数:

    const credentials = {
      client: {
        id: process.env.APP_ID,
        secret: process.env.APP_PASSWORD,
      },
      auth: {
        tokenHost: 'https://login.microsoftonline.com',
        authorizePath: "common/oauth2/v2.0/authorize",
        tokenPath: "common/oauth2/v2.0/token",
      }
    };
    const oauth2 = require('simple-oauth2').create(credentials);
    
    const tokenConfig = {
      username: 'uuuuuu@dddddd.com',
      password: 'ppppppp',
      scope: process.env.APP_SCOPES,
    };
    
    const getAccessToken = async () => {
      try {
        const result = await oauth2.ownerPassword.getToken(tokenConfig);
        const accessToken = oauth2.accessToken.create(result);
        return accessToken;
      } catch (error) {
        console.log('Access Token Error', error.message);
        return null;
      }
    };
    
    exports.getAccessToken = getAccessToken;
    

    然后你可以像这样使用那个函数:

    var express = require('express');
    var router = express.Router();
    var authHelper = require('../helpers/auth');
    
    router.get('/', async function(req, res, next) {
      let parms = { title: 'Home', active: { home: true } };
      const accessToken = await authHelper.getAccessToken();
      res.render('index', parms);
    });
    
    module.exports = router;
    

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2022-08-06
      相关资源
      最近更新 更多