【问题标题】:Authentication issue when using azure functions and autodesk forge使用 azure 函数和 Autodesk forge 时的身份验证问题
【发布时间】:2021-06-03 12:42:33
【问题描述】:

我正在尝试构建一个 azure 函数,以便从 Autodesk forge api 获取一些数据并放入集中式数据仓库。当我在本地测试所有内容时,它正在工作并更新我的表,但是当我将其部署为天蓝色的函数时,我在尝试使用 3 腿令牌时遇到了身份验证问题。

我正在使用这个 python 包装器:https://github.com/lfparis/forge-python-wrapper/tree/75868b11a3d8bac4b65f66b905c2313a35ba5711/forge

当我在本地运行时,身份验证工作正常,并且我获得了访问令牌等。但是,在 azure 上运行时,它不会被带到我的回调 url,而是将我定向到 https://auth.autodesk.com/as/NH3Mc/resume/as/authorization.ping?opentoken=..。因此在 url 中没有要提取的访问令牌。你知道我为什么会被重定向到这里吗?

这是处理三足身份验证的代码部分

        """https://forge.autodesk.com/en/docs/oauth/v2/reference/http/authorize-GET/"""  # noqa:E501
        url = "{}/authorize".format(AUTH_V1_URL)
        params = {
            "redirect_uri": self.redirect_uri,
            "client_id": self.client_id,
            "scope": " ".join(self.scopes),
            "response_type": response_type,
        }
        url = self._compose_url(url, params)
        logger.info('Start url: %s', url)
        chrome_driver_path = os.environ.get("CHROMEDRIVER_PATH")

        chrome_options = Options()
        chrome_options.add_argument("--headless")
        chrome_options.add_argument("--log-level=3")
        chrome_options.add_argument("--disable-gpu")
        chrome_options.add_argument("--no-sandbox")

        google_chrome_path = os.environ.get("GOOGLE_CHROME_BIN")
        if google_chrome_path:
            chrome_options.binary_location = google_chrome_path

        try:
            driver = Chrome(
                executable_path=chrome_driver_path,
                chrome_options=chrome_options,
            )
        except (TypeError, WebDriverException):
            chrome_driver_path = chromedriver_autoinstaller.install()
            driver = Chrome(
                executable_path=chrome_driver_path,
                chrome_options=chrome_options,
            )

        try:
            driver.implicitly_wait(15)
            driver.get(url)
            logger.info('Start driver url: %s', driver.current_url)
            user_name = driver.find_element(by=By.ID, value="userName")
            logger.info('Username: %s', self.username)
            user_name.send_keys(self.username)
            verify_user_btn = driver.find_element(
                by=By.ID, value="verify_user_btn"
            )
            verify_user_btn.click()
            logger.info('After first click url: %s', driver.current_url)
            pwd = driver.find_element(by=By.ID, value="password")
            logger.info('pwd: %s', self.password)
            pwd.send_keys(self.password)
            submit_btn = driver.find_element(by=By.ID, value="btnSubmit")
            submit_btn.click()
            logger.info('After Password url: %s', driver.current_url)
            allow_btn = driver.find_element(by=By.ID, value="allow_btn")
            allow_btn.click()
            driver.implicitly_wait(15)
            logger.info('Driver url: %s', driver.current_url)
            return_url = driver.current_url
            driver.quit()

        except Exception as e:
            self.logger.error(
                "Please provide the correct user information."
                + "\n\nException: {}".format(e)
            )
            "chrome://settings/help"
            "https://chromedriver.chromium.org/downloads"
            sys.exit()
        logger.info("Return url %s", return_url)
        params = self._decompose_url(return_url)
        logger.info("Returns params from Auth: %s", params)
        self.__dict__.update(params)```

【问题讨论】:

    标签: python azure autodesk-forge


    【解决方案1】:

    除了这是一个不寻常的(并且可能不受官方支持)工作流来获取三足令牌这一事实之外,我什至不确定这是否是 Autodesk Forge 方面的问题。您的本地 Selenium 设置与在 Azure 中运行的设置之间可能存在一些差异。在 Azure 中运行 Python 应用程序时,您是否尝试过检查来回发送的 HTTP 标头?那里的任何潜在差异都可以提供更多线索,说明您为什么没有被重定向到预期的 URL。

    【讨论】:

      猜你喜欢
      • 2016-12-08
      • 2019-06-15
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2022-10-17
      • 2015-02-02
      • 2021-05-16
      相关资源
      最近更新 更多