代码之家  ›  专栏  ›  技术社区  ›  Brandon Avant

Alexa Skill with Azure AD B2C Auth在一小时后过期

  •  0
  • Brandon Avant  · 技术社区  · 5 年前

    我目前正在构建一个由Azure函数(.NET Core/C#)和Azure AD B2C支持的Alexa技能,用于身份验证。

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

    Azure Active Directory B2C

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

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

    属性

    钥匙

    我生成了一个 应用程序密钥 ,我用它作为 账户链接 在Alexa开发者控制台中。

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

    API访问

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

    • 使用 用户模拟 上述范围。
    • 第二个标题为“访问用户档案”,使用:
      • 为用户获取id_令牌(openid)
      • 为用户获取刷新令牌(脱机访问)

    AAD B2C用户流

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

    属性

    杂项

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

    令牌寿命

    • 访问与维护;ID令牌生存时间(分钟):60
    • 刷新令牌生存期(天):14
    • 刷新令牌滑动窗口寿命:“有界”。
    • 寿命长度(天):90

    令牌兼容性设置

    • 发行人(iss)索赔: https://<domain>/<b2c-tenant-guid>
    • 主题(子)索赔:ObjectID
    • 表示用户流的声明:tfp

    会话行为

    • Web应用程序会话生存期(分钟):1440
    • Web应用程序会话超时:滚动
    • 单点登录配置:租户
    • 注销请求中需要ID令牌:否

    Azure功能认证中间件

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

    Alexa开发者控制台

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

    终点

    我的端点使用 HTTPS 选项,默认区域设置为my Azure Function App处理函数的完全限定HTTPS端点。

    证书设置为“我的开发端点是具有通配符的域的子域…”

    账户链接

    账户链接设置如下所示:

    • 您是否允许用户创建帐户或链接到…:打开
    • 允许用户无需帐户链接即可启用技能:已启用
    • 允许用户从应用程序或网站中将其帐户链接到您的技能:关闭
    • 授权代码:On
    • 授权URI: https://myorg.b2clogin.com/myorg.onmicrosoft.com/oauth2/v2.0/authorize?p=<sign-in-user-flow-policy-name>
    • 访问令牌URI: https://myorg.b2clogin.com/myorg.onmicrosoft.com/oauth2/v2.0/token?p=<sign-in-user-flow-policy-name>
    • 你的客户ID:AAD B2C应用程序GUID
    • 你的秘密:在AAD B2C中为我的Alexa Skill应用程序生成的应用程序内设置密钥(在上面的AAD B2C设置信息中提到)。
    • 您的身份验证方案:HTTP Basic
    • 范围:openid https://myorg.onmicrosoft.com/alexa/user_impersonation
    • 域列表:登录。微软在线。通用域名格式 迈尔格。克洛金。通用域名格式 注意:这可能是错误的,因为我不知道该在这里写什么。上面的文章根本没有提到这个设置
    • 默认访问令牌到期时间:3600

    注意:底部的Alexa重定向URL是我在AAD B2C中为 回复URL 部分

    问题

    现在最重要的是, 问题 .一开始一切似乎都正常。。。我能去alexa。亚马逊。com与利用 链接帐户 (这会将我重定向到AAD B2C驱动的登录屏幕,或从中重定向到AAD B2C驱动的登录屏幕)。一旦我链接了账户,我就能够成功地利用话语并收到回复。

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

    有谁能给我一些指导,告诉我哪些设置可能不正确,或者至少是一些我应该调查的事情?正如我在这个问题的开头所提到的,我在网上找到的许多参考资料已经过时,并且没有涵盖我预期使用的所有设置。他们中的许多人仍在使用微软在线。com权威对b2clogin。通用域名格式。

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

    0 回复  |  直到 5 年前
        1
  •  1
  •   Brandon Avant    5 年前

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

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

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

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

        2
  •  0
  •   Mohit    5 年前

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

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

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