如何在 Microsoft Power Automate 中使用自己的 OAuth2 连接自定义 API?

How to connect custom API using own OAuth2 in Microsoft Power Automate?

我一直在尝试将 Microsoft Power Automate 连接到我的 API。我的 API 有一个 OAuth2 代码流。 根据 Power Automate,连接器可以连接到我的 API。并执行测试。但问题是 Microsoft 发送了一个由他们生成的 Bearer 令牌,而不是我通过 OAuth2 给他们的令牌,结果我的 API 按预期给出了 401 错误(无效令牌)。

在 Power Automate 自定义连接器页面的安全选项卡中,我有以下内容:

身份验证类型

OAuth2.0

OAuth2.0 设置

当 Microsoft 向 mydomain.com/auth/token 发出 POST 请求时,我 return 以下正文:

{
access_token: "non JWT token", // simillar to a hash
refresh_token: "non JWT token",
expires_in: 3600
}

上述请求是微软在接受为有效连接之前的最终请求。 Microsoft 发送给我的令牌是 JWT 令牌,而不是我提供的令牌。

我看到一些人在应用程序中使用 Azure AD 身份验证,但我试图实现与其他平台形式类似的东西(例如 Github、Spotify、e.t.c)

所以我的问题是可以使用 OAuth2 将 Power Automate 连接到自定义 API 吗?如果是,怎么做?

有可能。

除了您列出的 OAuth2.0 设置之外,还有一个重要的 属性 Scope 您错过了。

由于您的 API 在 Azure AD 中受到保护,因此我假设您有 created an Azure AD app for your API and exposed scopes.

之后,您可以获得 API 的应用程序 ID URI (api://{clientId})。

您应该将此值放入 Power Automate 的“范围”中,如下所示:

然后您的 API 将认为此访问令牌有效。

我已经完成了两个步骤来解决这个问题。

第 1 步

之前我的 API 返回带有 access_tokenrefresh_tokenexpires_in 的正文,但后来我添加了 scopetoken_type。示例:

{
  access_token: "2346ad27d7568ba9896f1b7da6b5991251debdf2",
  refresh_token: "4468e5deabf5e6d0740cd1a77df56f67093ec943",
  expires_in: 3600,
  scope: "none",
  token_type: "Bearer"
}

第 2 步

删除自定义连接器并创建一个具有相同参数的新连接器。当我进入“测试”部分时,Power automate 终于可以成功发出 GET 请求了。

就我而言,即使 API 已更新,Power automate 仍在使用其错误令牌,因此我不得不删除该自定义连接器并创建新连接器。

结论

通过更新 API 并删除旧的自定义连接器,我能够使连接器正常工作。