Amazon web services Alexa Azure广告B2C认证技能在一小时后过期

Amazon web services Alexa Azure广告B2C认证技能在一小时后过期,amazon-web-services,azure,azure-active-directory,azure-functions,alexa-skills-kit,Amazon Web Services,Azure,Azure Active Directory,Azure Functions,Alexa Skills Kit,我目前正在构建一个由Azure Functions.NET Core/C和Azure AD B2C支持的Alexa技能,以进行身份验证 对于初始设置,我主要使用中的说明。由于这篇文章是几年前写的,我不得不做一些修改。最后,我采用了以下配置: Azure Active Directory B2C 正如我提到的,我们使用AAD B2C进行身份验证。相关应用程序的用户可以注册并登录React应用程序。其想法是通过Alexa意图+话语为上述用户提供一个替代界面 我使用以下设置在AAD B2C中为Alex

我目前正在构建一个由Azure Functions.NET Core/C和Azure AD B2C支持的Alexa技能,以进行身份验证

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

Azure Active Directory B2C 正如我提到的,我们使用AAD B2C进行身份验证。相关应用程序的用户可以注册并登录React应用程序。其想法是通过Alexa意图+话语为上述用户提供一个替代界面

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

性质 Web应用程序/Web API:是 允许隐式流:是 回复URL:我输入了Alexa技能设置提供的值,例如。;有三种不同的。我还为我的azure function应用程序添加了一个,这可能是不正确的。这是我在诊断其他早期问题时所做的工作的一部分;它的格式是:我需要这个吗??? 应用程序ID URI: 包括本机客户端:否 钥匙 我生成了一个应用程序密钥,我在Alexa开发者控制台的帐户链接部分使用它作为秘密

网上的许多例子都提到在这里设置一个明确的失效日期,即1年或2年;但是,我没有任何选项,即没有过期选项,只有代码。这可能是问题的一部分吗

API访问 在“已发布的作用域”部分中,作用域的名称为user\u impersonation。描述为代表已登录用户访问此应用。完整范围值为:。 对于API访问,我必须在此处输入API条目:

使用上面提到的用户模拟作用域的。 第二个标题为“访问用户配置文件”,使用: 获取用户openid的id_令牌 获取刷新\u令牌以供用户脱机\u访问 AAD B2C用户流 我使用的用户流允许注册和登录,它使用以下配置:

性质

杂项

启用JavaScript强制页面布局预览:打开 令牌寿命

访问和ID令牌生存时间分钟数:60 刷新令牌生存期天数:14 刷新令牌滑动窗口生存期:有界。 寿命天数:90天 令牌兼容性设置

发卡机构iss声明:https:/// 主题子索赔:ObjectID 表示用户流的声明:tfp 会话行为

Web应用程序会话生存时间分钟数:1440 Web应用程序会话超时:正在滚动 单点登录配置:租户 注销请求中需要ID令牌:否 Azure功能验证中间件 对于Azure函数中的身份验证层,我使用中描述的方法

Alexa开发人员控制台 在Alexa方面,我有一个非常简单的技能设置,包括以下设置:

端点 My endpoint使用HTTPS选项,默认区域设置为My Azure Function App处理程序函数的完全限定HTTPS端点

“我的开发终结点”的证书集是具有通配符的域的子域

帐户链接 帐户链接设置如下所示:

您是否允许用户创建帐户或链接到…:已启用 允许用户在无帐户链接的情况下启用技能:启用 允许用户从应用程序或网站中将其帐户链接到您的技能:关闭 授权代码:启用 授权URI:https://myorg.b2clogin.com/myorg.onmicrosoft.com/oauth2/v2.0/authorize?p= 访问令牌URI:https://myorg.b2clogin.com/myorg.onmicrosoft.com/oauth2/v2.0/token?p= 您的客户端ID:AAD B2C应用程序GUID 你的秘密:在AAD B2C中为上面AAD B2C设置信息中提到的我的Alexa Skill应用程序在应用程序设置中生成的密钥。 您的身份验证方案:HTTP Basic 范围:openid和 域名列表:login.microsoftonline.com和myorg.b2clogin.com注意:这可能是错误的,因为我不知道在这里放什么。上面的文章根本没有提到这个设置 默认访问令牌过期时间:3600 注意:底部的Alexa重定向URL是我放在AAD B2C中的回复URL部分

问题 现在最重要的部分是问题。一开始一切似乎都正常…我可以访问alexa.amazon.com并利用链接帐户将我重定向到AAD B2C驱动的登录屏幕。一旦我链接了账户,我就能够成功地利用话语并收到回复

当我等一个小时的时候问题就开始了我相信这是一个小时。尝试在一小时后启动意图会在Azure Function应用程序尝试验证身份验证令牌时出错

有谁能给我一些指导,告诉我哪些设置可能不正确,或者至少是一些我应该调查的事情?正如我在这个问题的开头提到的,我在网上找到的很多参考资料都已经过时了,并且没有涵盖所有的问题 我希望使用的设置。他们中的许多人仍在使用microsoftonline.com authority vs.b2clogin.com


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

我想我现在有足够的信息来回答我自己的问题。我发现离线访问范围对于令牌刷新是必要的

根据Microsoft的规定,脱机_访问范围允许您的应用程序在较长时间内代表用户访问资源。在“同意”页面上,此范围显示为“维护对数据的访问权限”,您已授予其访问权限。当用户批准脱机访问范围时,您的应用程序可以从Microsoft identity platform令牌端点接收刷新令牌。刷新令牌是长期存在的。当旧的访问令牌过期时,您的应用程序可以获得新的访问令牌

你可以阅读更多关于它的内容


为了解决这个问题,我确保这个作用域在AAD B2C中可用,并在Alexa开发者控制台中将其作为参考作用域添加。

感谢您提供关于脱机访问的见解。花了几个小时才弄明白如何实现脱机访问。有趣的是,离线访问仅适用于Azure AD、OAuth 1.0端点,而不适用于2.0

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


最后,我使用了OAuth 1.0端点,并使用了考虑应用程序可用的所有作用域的作用域

在我进一步挖掘的过程中,我在AAD B2C中发现了一个作用域,其描述是为用户离线访问获取刷新令牌。因此,我在Alexa开发者控制台链接的帐户设置中引用了脱机访问作为作用域。我试过了,已经两个小时了,问题没有再次出现。我谨慎乐观地认为,这正是我们所缺少的。一旦我确认,我会相应地更新这个问题。