使用Azure流量管理器和移动应用程序

时间:2017-10-12 20:56:53

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

Azure Traffic Manager是否可以与社交登录专门用于移动应用程序?我已经配置了一个流量管理器和两个应用程序服务(比如,mobileapp1和mobileapp2)来使用它。他们似乎与邮递员和响应工作相当不错,一切正常。现在,我已将流量管理器的URL声明为xamarin客户端应用程序中的客户端,当我登录到azure时,应用程序会抛出异常。登录facebook后,当我使用此行将令牌传递给服务器时

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

它在此行引发异常,表示无效操作。

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

1 个答案:

答案 0 :(得分:1)

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

enter image description here

对于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 Traffic Manager是否可以与社交登录专门用于移动应用程序?

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

<强> UPDATE1:

经过一些试验,我发现您可以在&#34; SETTING&gt;下设置WEBSITE_AUTH_SIGNING_KEY设置。应用程序设置&#34;移动应用的刀片覆盖WEBSITE_AUTH_SIGNING_KEY环境变量,如下所示:

enter image description here

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

<强> UPDATE2:

  

我的问题是弄清楚如何在两个不同的移动应用程序中使用社交认证,其中流量管理器的重定向正在基于性能发生

正如官方documentation提到的流量路由方法效果如下:

  

效果:当您在不同的地理位置拥有终端并希望最终用户使用&#34;最近的&#34;端点就网络延迟最低而言。

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

enter image description here

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

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

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

对于效果路由方法,我的所有请求都将路由到bruce-mobile02.azurewebsites.net

enter image description here

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

enter image description here