根据您的代码,您将 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 环境变量来签名 audience、issuer、Claims。更多详情,您可以参考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 的请求将被路由到我的两个端点,如下所示: