2017-02-20 87 views
0

Azure上有两个用于移动应用服务的插槽:生产和开发。此外,我有一个客户端应用程序,可以使用此移动服务。在生产槽位托管的应用程序版本不包含认证。在开发槽位托管的应用程序版本具有身份验证功能,并且运行良好所以,我的客户端应用程序可以获取身份验证令牌和访问受保护的API,并使用托管在开发槽中的服务。当我交换此插槽时,客户端应用程序仍然可以获取身份验证令牌,但无法访问受保护的API。我使用获取的令牌调用API时出现错误401未授权。Azure jwt令牌在交换插槽后无法工作

我使用一个自定义的验证作为docs

描述两个插槽的配置相同:验证:启用时,要采取的行动时,请求未通过身份验证:允许匿名请求,认证供应商:禁用。据我所知,这些插槽之间的唯一区别就是URL。它看起来像服务的URL改变时,它开始产生无效的令牌。

这可能是这种行为的原因?

回答

0

参与令牌创建过程的参数之一是hostname。在我的代码中,主机名值由MobileAppSettings提供。问题是MobileAppSettings在插槽交换后返回开发槽的主机名值,所以生成的令牌无效。服务重新启动修复此行为。

0

对于任何遇到此问题的人,在使用Azure身份验证和插槽交换时还有一些其他事项需要考虑。首先,Azure团队已更正了主机名问题,因此所有插槽都具有相同的主机名(您可以在每个插槽的“环境”设置中对此进行验证)。在一个插槽上生成的令牌现在在所有其他插槽上完全有效。然而,当一个令牌被生成时,它被存储在每个插槽的硬盘驱动器上的一个文件夹中,并且该文件夹不粘到特定的插槽上。这意味着如果客户端用户在生产槽中使用令牌并交换生产和分段槽,则该客户端的令牌不再有效(因为生产槽上的令牌引用现在位于分段槽上) 。

这可能是也可能不是您的应用程序的问题。如果您需要用户频繁登录,那么他们甚至可能不会注意到需要额外登录。但是,如果你拥有持久的令牌(就像大多数社交网站一样),那么这可能会导致一些令人头痛的问题。