【问题标题】:Using Azure traffic manager with Mobile App将 Azure 流量管理器与移动应用程序一起使用
【发布时间】:2017-10-12 20:56:53
【问题描述】:

Azure 流量管理器能否与移动应用程序一起使用,特别是社交登录?我已经配置了一个流量管理器和两个应用程序服务(例如,mobileapp1 和 mobileapp2)来使用它。它们似乎与邮递员一起工作得很好,响应和一切正常。现在,我已在 xamarin 客户端应用程序中将流量管理器的 URL 声明为客户端,并且当我登录到 azure 时,该应用程序会引发异常。登录 facebook 后,当我使用此行将令牌传递给服务器时

var user = await client.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token);

它在这一行抛出一个异常,说明操作无效。

继续这个疑问。我有两个移动应用程序与一个流量管理器相连。他们俩都配置了facebook登录。那么,它应该工作吗?如果在用户注册时,他/她被重定向到 mobileapp1 并在那里完成 azure 身份验证,而在随后的一些尝试中,用户被重定向到 mobileapp2,会发生什么情况。 mobileapp2的身份数据库是否知道用户?这是我使用移动应用程序而非 B2C 随附的身份验证服务时。

【问题讨论】:

    标签: xamarin azure-mobile-services azure-traffic-manager


    【解决方案1】:

    根据您的代码,您将 Client-managed authentication 与 Azure 移动应用程序一起使用。对于应用服务身份验证/授权,例如移动客户端类型,将向客户端发出 JSON Web 令牌 (JWT),并在向移动后端发送请求时显示在 x-zumo-auth 标头中。更多详情可以参考How authentication works in App Service。这是在移动应用中使用 Azure 流量管理器时的 JWT 令牌,我们可以使用 jwt.io 来解码令牌:

    对于 JWT 令牌,它将使用 WEBSITE_AUTH_SIGNING_KEY 环境变量来签名 audienceissuerClaims。更多详情,您可以参考here 了解如何为您的应用使用自定义身份验证。

    每个移动应用都有不同的WEBSITE_AUTH_SIGNING_KEY,您可以使用kudu并点击环境找到它。此外,我尝试更新我的两个移动应用程序以使用相同的签名密钥,但由于没有权限而失败。

    您的LoginAsync 将发送以下请求:

    POST https://<yourname>.trafficmanager.net/.auth/login/facebook
    Body {"access_token":"<access_token_from_facebook>"} 
    

    您可以使用fiddler 来捕获网络跟踪。

    Azure 流量管理器能否与移动应用一起使用,特别是通过社交登录?

    对于自定义身份验证,您可以在 web.config 文件中配置签名密钥。对于社交登录和使用 azure 提供的身份验证,您不能在不同的移动应用程序之间共享签名密钥。此外,如果您将Routing method 设置为Geographic 并且您的移动应用程序位于不同的地理位置,我认为您的方案可能会按预期工作。

    更新1:

    经过一些试验,我发现您可以在移动应用的“设置 > 应用程序设置”选项卡下指定 WEBSITE_AUTH_SIGNING_KEY 设置来覆盖 WEBSITE_AUTH_SIGNING_KEY 环境变量,如下所示:

    注意:签名密钥必须是 SHA-256 哈希字符串,您可以在两个移动应用之间同步密钥或生成自定义密钥。配置设置后,您可以利用 kudu 查看最新的WEBSITE_AUTH_SIGNING_KEY

    更新 2:

    我的问题是弄清楚如何将社交身份验证与两个不同的移动应用程序一起使用,其中流量管理器根据性能进行重定向

    正如官方documentation提到的流量路由方式性能如下:

    性能:当您的端点位于不同的地理位置并且您希望最终用户使用网络延迟最低的“最近”端点时,请选择性能。

    我做了一些测试,你可以参考一下。这是我的流量管理器配置文件下的端点:

    注意:我的两个移动应用程序为我的 MSA 身份验证配置了相同的 Client Id,并在“设置 > 应用程序设置”下设置了相同的 WEBSITE_AUTH_SIGNING_KEY 值用于编码/解码令牌。

    对于我的/api/values API 端点,我只返回WEBSITE_HOSTNAME 环境变量,如下所示:

    return Request.CreateResponse(new { WEBSITE_HOSTNAME =Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME") });
    

    对于 Performance 路由方法,我所有的请求都会被路由到bruce-mobile02.azurewebsites.net

    对于 Weighted 路由方法,我为我的两个端点配置了相同的 WEIGHT。根据我的测试,与x-zumo-auth 授权标头值附加的具有相同AuthenticationToken 的请求将被路由到我的两个端点,如下所示:

    【讨论】:

    • 感谢您的回复。我确实了解身份验证在 azure 移动应用程序中的工作原理,但它使它更清晰。我也明白,如果转移到其中一个移动应用程序的限制是地理上的,那么它将起作用,因为来自一个位置的一个用户将始终到达一台服务器,该服务器将始终具有他/她的身份。但在我们的案例中,我们尝试将性能作为指标。
    • 我通过一些研究更新了我的答案,你可以参考一下。
    • 再次感谢布鲁斯。我明白你在说什么,但正如我所说,我的问题是弄清楚如何将社交身份验证与两个不同的移动应用程序一起使用,其中流量管理器的重定向是根据性能发生的,经过一些研究,它似乎目前还不可能除非我使用 B2C 构建完整的自定义身份验证,而不依赖 azure 开箱即用的社交身份验证。
    • 我做了一些测试,使用性能路由方法的流量管理器可以很好地与我的两个 azure 移动应用程序配合使用。您可以参考我的更新了解更多详情。
    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 2018-01-28
    • 1970-01-01
    • 2017-11-12
    • 2014-03-05
    • 2017-10-03
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多