Xamarin.Forms Azure移动应用程序服务脱机同步,无需在Azure上托管Web Api

时间:2018-01-18 20:06:41

标签: azure xamarin xamarin.forms azure-active-directory azure-mobile-services

目前我的应用程序使用Azure移动应用程序服务来管理脱机同步和身份验证。使用Azure Active Directory进行身份验证,我设置的方式是将web api作为应用程序服务发布到azure上,并将其配置为Active Directory部分中的应用程序。在Xamarin.Forms中完成的Native App也是在azure中配置的,这样每当应用程序发出请求时,它都可以使用api进行适当的身份验证。

我现在想要做的就是把这个web api放在一个内部服务器上。我必须这样做才能优化我在检索数据时遇到的一些延迟问题。我的问题是如何在使用Azure Active Directory作为我的身份验证器的同时,将api in和on-premise服务器中的脱机同步功能用于此。

我主要遇到的问题是实施的身份验证部分。

我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

根据您的描述,您使用Authentication and authorization in Azure App Service进行内置身份验证,而无需更改应用后端的代码。 Authentication / Authorization for Azure App Service(Easy Auth)实现为在Azure端运行的本机IIS模块,您可以关注Architecture of Azure App Service Authentication / Authorization的详细信息。

  

我的问题是如何在使用Azure Active Directory作为我的身份验证器时,如何使用api in和on-premise服务器进行脱机同步功能。

AFAIK,我们无法安装本机IIS模块easyauth.dll。根据您的方案,您需要做一些额外的工作来实现您的目的。

对于.NET后端,您可以使用Microsoft.Azure.Mobile.Server.Authentication OWIN中间件来验证令牌(JWT authenticationToken)。 注意:此中间件用于本地开发和调试移动应用.net服务器。

  • 对于Client-managed authentication流程

    您需要在应用后端添加一个额外的端点,以便接收AAD返回给客户端用户的access_token,然后您的应用后端将使用访问令牌访问已登录的用户端点(例如{ {3}})检索用户基本信息,然后将用户信息编码为JWT令牌并返回到您的客户端。以下是生成JWT令牌的示例,您可以参考https://graph.windows.net/me?api-version=1.6

    注意: App Service内置身份验证还会为移动客户端生成JWT authenticationToken。对于此方法,您可以手动检索已登录的用户信息,并按照it自行生成令牌。

  • 对于custom-auth流程

    您需要提供登录端点并将用户重定向到AD授权端点,然后您的应用后端接收authorization_code并检索access_token,然后通过access_token访问登录的用户信息,然后将用户声明编码为JWT authenticationToken并将令牌(例如https://{your-domain}/.auth/login/done#token={the-json-string-of-LoginResult})重定向到客户端用户。

注意:以上两种方法用于在您的内部部署服务器上实现Easy Auth的一些类似功能。

此外,您可以使用AAD v1.0端点的 UseWindowsAzureActiveDirectoryBearerAuthentication 或AAD v2.0端点的 UseOAuthBearerAuthentication 来投影您的Web API而不是身份验证中间件由Microsoft.Azure.Mobile.Server.Authentication提供。以下是一些教程,您可以按照它们进行操作:

Server-managed authentication

Azure AD .NET Web API getting started

对于此方法,您的移动客户端可以利用ADAL或MSAL客户端库来获取令牌。然后,当您实现MobileServiceClient实例时,您可以指定一个自定义Secure an MVC web API with AAD v2.0 endpoint,用于将带有值的授权标头添加到您作为针对Web API后端的承载令牌获取的访问令牌。您可以按照DelegatingHandler下的如何:自定义请求标题部分的详细信息。