与Google的操作中与我自己的OAuth服务器的帐户链接缺少授权类型

问题描述 投票:0回答:1

我正在尝试实施智能家居操作。它始于这个例子https://codelabs.developers.google.com/codelabs/smarthome-washer/#0这正在工作。

此示例将Firestore用作云服务。我想自己实现服务器。对于在本地PC上作为服务器的第一个测试,可以通过端口转发进行访问。我创建了一个加密证书,并使用一个nodejs express htpps服务器。对于Oauth实现,我使用与示例相同的“不安全”代码。

    expressApp.get('/fakeauth', async (req, res) => {
        console.log('fakeauth',req.headers, req.body, req.query);
        const responseurl = util.format('%s?code=%s&state=%s',
          decodeURIComponent(req.query.redirect_uri), 'xxxxxx',
          req.query.state);
        console.log(responseurl);
        return res.redirect(responseurl);
    });

    expressApp.all('/faketoken', async (req, res) => {
        console.log('faketoken',req.headers, req.body, req.query);
        const grantType = req.query.grant_type
          ? req.query.grant_type : req.body.grant_type;
        const secondsInDay = 86400; // 60 * 60 * 24
        const HTTP_STATUS_OK = 200;
        console.log(`Grant type ${grantType}`);

        let obj;
        if (grantType === 'authorization_code') {
          obj = {
            token_type: 'bearer',
            access_token: '123access',
            refresh_token: '123refresh',
            expires_in: secondsInDay,
          };
        } else if (grantType === 'refresh_token') {
          obj = {
            token_type: 'bearer',
            access_token: '123access',
            expires_in: secondsInDay,
          };
      }
        res.status(HTTP_STATUS_OK)
          .json(obj);
    });

现在,我更改了将URL链接到本地​​服务器的帐户。当我尝试连接到该动作时,它不起作用。

对fakeauth端点的请求正常。但是,当google调用faketoken端点时,查询丢失并且主体为空。请求的url是... / faketoken,没有任何查询,并且为空。

fakeauth请求的响应不会有问题,因为如果我将fakeauth请求发送到我的服务器,将faketoken请求发送到firestore服务器,则帐户链接将正常工作。我尝试的第二个。将fakeauth发送到firestore服务器,并将faketoken发送到我的服务器。结果是一样的。没有查询,没有正文。

我不知道我在做什么错,因为这是Google的请求是错误的。

有人知道错在哪里吗?我已经搜索过,但是找不到遇到相同问题的人。

感谢您的帮助。问候西蒙

oauth action actions-on-google account-linking
1个回答
0
投票

您可以使用Google OAuth Playground来验证您的帐户关联实施是否正常运行。您可以通过以下方法配置此工具以测试您的自定义端点:

  1. 打开设置齿轮,将OAuth端点更改为自定义
  2. 从操作控制台输入您的授权和令牌URL
  3. 从操作控制台输入您的客户端ID和机密

您将不会授权任何Google API,因此对于步骤1,您只需输入“设备”之类的内容,然后单击授权API。您可以按照步骤2中的流程进行操作,以验证授权和令牌交换是否正常工作。该工具将报告流程中是否发生任何错误。

© www.soinside.com 2019 - 2024. All rights reserved.