带有 Azure AD B2C Auth 的 Alexa Skill 在一小时后过期

Alexa Skill with Azure AD B2C Auth expires after an hour

我目前正在构建由 Azure Functions (.NET Core/C#) 和 Azure AD B2C 支持的 Alexa 技能以进行身份​​验证。

对于初始设置,我主要使用 this arcticle 中的说明。因为这篇文章是几年前写的,所以我不得不做一些修改。最后,我登陆了以下配置:

Azure Active Directory B2C

正如我提到的,我们正在使用 AAD B2C 进行身份验证。相关应用程序的用户能够 sign-up 和 sign-in 到 React 应用程序。这个想法是通过 Alexa intents + utterances 为所述用户提供替代界面。

我使用以下设置在 AAD B2C 中为 Alexa 创建了一个应用程序:

属性

我生成了一个 App Key,我将其用作 Account Linking 部分中的 Secret在 Alexa 开发者控制台中。

许多在线示例都提到在此处设置明确的到期日期为 1 年或 2 年;但是,我根本没有看到任何选项(即没有过期选项),只有代码。这可能是问题的一部分吗???

API访问

为了 API 访问,我必须在此处 API 条目:

AAD B2C 用户流程

我使用的用户流程允许注册和登录,它使用以下配置:

属性

杂项

令牌生命周期

令牌兼容性设置

Session 行为

Azure 函数身份验证中间件

对于 Azure Functions 中的身份验证层,我使用了 the article mentioned above 中描述的方法。

Alexa 开发者控制台

在 Alexa 方面,我有一个非常简单的技能设置,设置如下:

端点

我的端点使用 HTTPS 选项,默认区域设置为我的 Azure Function App 处理函数的 fully-qualified HTTPS 端点。

证书设置为"My development endpoint is a sub-domain of a domain that has a wildcard ..."

帐户 Linking

帐户 linking 设置如下所示:

注意:底部的 Alexa Redirect URLS 是我在 AAD B2C 中为 Reply URL 部分添加的内容。

问题

现在是最重要的部分,问题。一开始一切似乎都正常......我可以去 alexa.amazon.com 并利用 Link 帐户 (这将我重定向到我的 AAD B2C-驱动的登录屏幕)。一旦我 link 帐户,我'能够成功地使用话语并收到回复。

当我等一个小时(我相信是一个小时)时,问题就开始了。尝试在一小时后启动 Intent 会在 Azure Function 应用端尝试验证 Auth Token 时产生错误。

任何人都可以就我可能设置不正确的地方或至少我应该调查的一些事情向我提供一些指导吗?正如我在这个问题的开头提到的,我在网上找到的许多参考资料都是 out-of-date 并且没有涵盖我期望使用的所有设置。他们中的许多人仍在使用 microsoftonline.com 权限与 b2clogin.com.

乍一看,我认为问题出在 Alexa 技能在一小时后过期后未能刷新其令牌。我需要做什么来确保它正确刷新?

我认为此时我有足够的信息来继续回答我自己的问题。我发现 offline_access 范围是令牌刷新所必需的。

根据 Microsoft,"The offline_access scope gives your app access to resources on behalf of the user for an extended time. On the consent page, this scope appears as the "保持对您授予其访问权限的数据的访问权限。当用户批准 offline_access 范围时,您的应用程序可以从中接收刷新令牌Microsoft 标识平台令牌端点。刷新令牌是长期存在的。您的应用可以在旧令牌过期时获取新的访问令牌。“

您可以阅读更多相关信息 here

为解决该问题,我确保此范围在 AAD B2C 中可用,并将其添加为 Alexa 开发人员控制台中的引用范围。

感谢您提供有关 offline_access 的见解。弄清楚如何实施 offline_access 花了几个小时。有趣的是 offline_access 仅适用于 Azure AD、OAuth 1.0 端点,不适用于 2.0。

在尝试使用 2.0 时,当在 Alexa 配置中提到多个范围时,它在帐户链接时一直失败。我试过的示波器如下。

最后,我最终使用 OAuth 1.0 端点并使用范围 https://samplealexabackendapi/.default,它考虑了已注册应用程序可用的所有范围。