当前位置: 首页 > 知识库问答 >
问题:

使用Azure ADB2CAuth的Alexa技能在一小时后过期

沈巴英
2023-03-14

我目前正在构建一个由Azure Functions(.NET Core/C#)和Azure ADB2C进行身份验证。

对于初始设置,我主要使用了在这个圆弧图中找到的指令。因为这篇文章是几年前写的,所以我不得不做一些修改。最终,我登陆了以下配置:

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

我在AADB2C中为Alexa创建了一个应用程序,设置如下:

  • Web App/Web API: Yes
  • 允许隐式流:是
  • 回复网址:我输入了Alexa技能设置提供的值(例如https://pitangui.amazon.com/api/skil/link/...);有三种不同的。我还为我的Azure函数应用程序添加了一个(这可能是不正确的。这是我诊断其他早期问题时所做的工作的一部分);它的格式是:https://myfuncname.azurewebsites.net/.auth/login/aad/callback(我需要这个吗???)
  • 应用ID URI:https://myorg.onmicrosoft.com/alexa
  • 包含本地客户端:否

我生成了一个应用程序密钥,我在Alexa开发者控制台的帐户链接部分使用它作为秘密。

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

  • 在已发布范围部分中,范围的名称是user_impersonation。描述为"代表登录用户访问此应用"。全范围值为:https://myorgsname.onmicrosoft.com/alexa/user_impersonation.

对于API访问,我必须在此处输入API条目:

  • 使用上面提到的user_impersonation范围的程序。
  • 第二个,标题为访问用户的配置文件,使用:
    • 获取用户的id_token(openid)
    • 为用户获取refresh_token(offline_access)

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

    性质

    杂项

    • 启用JavaScript强制页面布局(预览):在

    令牌寿命

    • 访问

    令牌兼容性设置

    • 发卡机构(iss)声明:https://

    会话行为

    • Web应用程序会话生存期(分钟):1440

    对于Azure函数中的身份验证层,我正在使用上述文章中描述的方法

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

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

    将证书设置为"我的开发终结点是具有通配符的域的子域..."

    帐户链接设置如下所示:

    • 您是否允许使用创建帐户或链接到...
    • 允许用户在没有账户链接的情况下启用技能:切换打开
    • 允许用户从您的应用程序或网站内链接他们的帐户到您的技能:切换关闭
    • 授权代码授予:在
    • 授权URI:https://myorg.b2clogin.com/myorg.onmicrosoft.com/oauth2/v2.0/authorize?p=

    注意:底部的Alexa重定向网址是我放在AADB2C的回复网址部分。

    现在最重要的部分,问题。起初一切似乎都在起作用...我可以去alexa.amazon.com并利用链接帐户(它重定向我和我的AADB2C驱动的登录屏幕)。一旦我链接了账户,我就能够成功地利用一个话语并收到回复。

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

    有人能给我一些指导,说明我可能设置错误,或者至少一些我应该调查的事情吗?正如我在这个问题的开头提到的,我在网上找到的许多参考文献都已经过时,并且没有涵盖我期望使用的所有设置。他们中的许多人仍然使用microsoftonline.com权威与b2clogin.com.

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


共有2个答案

阎雪峰
2023-03-14

谢谢你对offline_access的见解。花了几个小时才想出如何实施offline_access。有趣的是offline_access只适用于Azure AD、OAuth 1.0终结点,而不适用于2.0。

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

  • https://samplealexabackendapi/
  • https://graph.microsoft.com/offline_access

最后,我使用了OAuth1.0endpoint并使用了作用域https://samplealexabackendapi/.default其中考虑了已注册应用程序可用的所有作用域。

束研
2023-03-14

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

根据Microsoft,"offline_access范围允许应用代表用户长时间访问资源。在同意页上,此范围显示为“保持对已授予其访问权限的数据的访问权限”权限。用户批准offline_access范围后,应用可以从Microsoft标识平台令牌终结点接收刷新令牌。刷新令牌是长寿的。旧的访问令牌过期后,应用可以获得新的访问令牌。"

你可以在这里读到更多。

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

 类似资料:
  • 我用DialogFlow为Google Home编写了一个智能扬声器应用程序,现在正在将其移植到Alexa。 一个根本的区别似乎是不能轻易触发后续意图。例如,我有一个对话框,在根据提供的答案提供结果之前,会问用户一系列问题。例如({插槽类型}) 你喜欢低维护的花园还是工作花园?{低维护}{工作} 你喜欢一个可以放松的花园吗?{是/否} 你想在花园里种菜吗?{是/否} 使用DialogFlow后续意

  • 我试图创建一个Alexa技能,从我的网站上提取数据,当我使用HTTPS时,请求错误被排除,尽管在其他需要api密钥的网站上使用HTTPS是可以的,比如《纽约时报》。这是一个代码片段

  • 我有一个Alexa技能,已经在Alexa应用商店发布了一段时间。最近,用户通过语音安装这项技能的能力不再有效。在过去的7天里我注意到了这一点。 现在,当用户询问“Alexa,启用商店店员”时,他们会听到这样的信息: “如果您想启用此技能,可以在Alexa应用程序的“技能”部分找到它。” 以前(对于我尝试过的几乎所有技能),正常的反应是安装并启用该技能。 有没有人见过这种行为,或者知道我如何解决这个

  • 我有点困惑。 有没有可能不在AWS上托管Alexa Smarthome技能。 在我的最后一项定制技能中,我使用了Alexa应用程序,但据我所知,它不支持来自亚马逊的Smarthome API。此外,我还没有找到任何支持Smarthome API的库。 也许你可以帮我找到一个库,这样我就可以在自己的服务器上托管我的智能家庭技能。 Pref语言:JavaScript和Ruby

  • 我将Alexa技能创建为AWS Lambda节点。js应用程序基于Alexa技能工具包中提供的一个示例。我遵循了所有的指示: My Echo在AWS上注册了与我的开发者账户相同的账户 我在亚马逊开发者控制台上配置了我的技能 我把我的应用程序ID从控制台到我的应用程序代码 我将我的代码上传到AWS Lambda服务(设置为N。弗吉尼亚,按照指示) 我测试了我的服务,它返回了预期的JSON 我输入我的

  • 我们正在研究使用GoogleOAuthAPI进行帐户链接的Alexa技巧。Alexa技能的一切都很好。 现在,当我们使用帐户链接使用谷歌帐户。在OAuth同意屏幕上,当Google API应用程序类型选择为internal时,会显示正确的详细信息,即选择一个帐户继续{Application Name}。但是当应用程序类型被选择为Public时,它会显示错误的详细信息,即选择一个帐户继续{amazo