【问题标题】:Xamarin.Forms Azure Mobile App Services Offline Sync without hosting Web Api on AzureXamarin.Forms Azure 移动应用服务离线同步,无需在 Azure 上托管 Web Api
【发布时间】:2018-01-18 20:06:41
【问题描述】:

目前,我有一个使用 Azure 移动应用服务来管理离线同步和身份验证的应用。身份验证是使用 Azure Active Directory 完成的,我设置它的方式是 Web api 在 azure 上作为应用服务发布,并在 Active Directory 部分中配置为应用。在 Xamarin.Forms 中完成的本机应用程序也在 azure 中进行了配置,这样每当应用程序发出请求时,它就可以正确地通过 api 进行身份验证。

我现在想要做的是把这个 web api 放到本地服务器中。我必须这样做以优化我在检索数据时遇到的一些延迟问题。我的问题是如何在仍然使用 Azure Active Directory 作为身份验证器的同时,将离线同步功能与 api in 和本地服务器一起使用。

我最常遇到的问题是实现的身份验证部分。

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    根据您的描述,您正在使用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 和本地服务器一起使用。

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

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

    • 对于Client-managed authentication

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

      注意: App Service 内置身份验证还会为移动客户端生成 JWT authenticationToken。对于这种方法,您需要手动检索已登录的用户信息,然后按照custom-auth 自行生成令牌。

    • 对于Server-managed authentication

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

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

    此外,您可以只使用中间件 UseWindowsAzureActiveDirectoryBearerAuthentication 用于 AAD v1.0 端点或 UseOAuthBearerAuthentication 用于 AAD v2.0 端点来投射您的 Web API,而不是身份验证中间件由 Microsoft.Azure.Mobile.Server.Authentication 提供。这里有一些教程,你可以关注他们:

    Azure AD .NET Web API getting started

    Secure an MVC web API with AAD v2.0 endpoint

    对于这种方法,您的移动客户端可以利用 ADAL 或 MSAL 客户端库来获取令牌。然后,当您实现MobileServiceClient 实例时,您可以指定一个自定义DelegatingHandler 以将授权标头与值添加到您作为承载令牌获取的访问令牌中,以针对您的Web API 后端。您可以按照Working with the client SDK 下的如何:自定义请求标头部分的详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多