将 Azure 流量管理器与移动应用程序结合使用

Using Azure traffic manager with Mobile App

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

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

它在这一行抛出异常,提示操作无效。

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

根据您的代码,您正在使用 Client-managed authentication with Azure Mobile Apps. For App Service Authentication / Authorization, such as mobile client type, a JSON web token (JWT) would be issued to the client and the it would be presented in the x-zumo-auth header when sending request to mobile backend. For more details, you could refer to How authentication works in App Service. Here is a JWT token when using Azure traffic manager with Mobile App, we could use 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 来捕获网络跟踪。

Can Azure Traffic Manager be used with Mobile Apps specially with social login?

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

更新1:

经过一些尝试,我发现您可以在移动应用的 "SETTING > Application settings" blade 下指定 WEBSITE_AUTH_SIGNING_KEY 设置来覆盖 WEBSITE_AUTH_SIGNING_KEY 环境变量,如下所示:

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

更新2:

my problem is figuring out how to use social auth with two different mobile apps where redirection by traffic manager is happening on the basis of performance

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

Performance: Select Performance when you have endpoints in different geographic locations and you want end users to use the "closest" endpoint in terms of the lowest network latency.

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

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

对于我的 /api/values API 端点,我只是 return WEBSITE_HOSTNAME 环境变量如下:

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

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

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