使用适用于 Azure 移动应用的 .NET 后端服务器 SDK

本主题介绍如何在关键的 Azure 应用服务移动应用方案中使用 .NET 后端服务器 SDK。 Azure 移动应用 SDK 可帮助你从 ASP.NET 应用程序中使用移动客户端。

小提示

适用于 Azure 移动应用的 .NET 服务器 SDK 是 GitHub 上的开放源代码。 存储库包含所有源代码,包括整个服务器 SDK 单元测试套件和一些示例项目。

参考文档

服务器 SDK 的参考文档位于以下位置: Azure 移动应用 .NET 参考

如何:创建 .NET 移动应用后端

如果正在启动新项目,可以使用 Azure 门户 或 Visual Studio 创建应用服务应用程序。 可以在本地运行应用服务应用程序,也可以将项目发布到基于云的应用服务移动应用。

如果要向现有项目添加移动功能,请参阅 “下载并初始化 SDK ”部分。

使用 Azure 门户创建 .NET 后端

若要创建应用服务移动后端,请遵循 快速入门教程 或按照以下步骤作:

  1. Azure 门户登录。

  2. 选择“+NEW>Web + 移动>移动应用”,然后为你的移动应用后端提供一个名称。

  3. 对于 资源组,请选择现有资源组,或创建新的资源组(使用与应用同名)。

  4. 对于 应用服务计划,选择默认计划(标准层)。 还可以选择其他计划,或 创建新的计划

    应用服务计划的设置确定与应用关联的 位置、功能、成本和计算资源。 有关应用服务计划以及如何在不同的定价层和所需位置创建新计划的详细信息,请参阅 Azure 应用服务计划深入概述

  5. 选择 创建。 此步骤创建移动应用后端。

  6. 在新的移动应用后端的“设置” 窗格中,选择“快速入门> 客户端应用平台 >连接数据库

    用于连接数据库的选择

  7. 在“添加数据连接 窗格中,选择 SQL 数据库>创建新的数据库。 输入数据库名称,选择定价层,然后选择 服务器。 可以重复使用此新数据库。 如果已有同一位置的数据库,则可以选择 使用现有数据库。 由于带宽成本和延迟较高,不建议在不同的位置使用数据库。

    选择数据库

  8. “新建服务器”窗格中,在 服务器名称 框中输入唯一的服务器名称,提供登录名和密码,选择“允许 Azure 服务访问服务器,然后选择 确定。 此步骤将创建新数据库。

  9. 返回到“添加数据连接”窗格,选择“连接字符串”,输入您的数据库的登录名和密码,然后选择“确定”。

    请等待几分钟,让数据库成功部署,然后再继续。

返回“ 入门” 边栏选项卡,在 “创建表 API”下,选择 C# 作为 后端语言。 单击“ 下载”,将压缩的项目文件解压缩到本地计算机,然后在 Visual Studio 中打开解决方案。

使用 Visual Studio 2017 创建 .NET 后端

通过 Visual Studio 安装程序安装 Azure 工作负载,以便从 Visual Studio 发布到 Azure 移动应用项目。 安装 SDK 后,使用以下步骤创建 ASP.NET 应用程序:

  1. 打开 “新建项目 ”对话框(从 文件>新建>项目...)。
  2. 展开 Visual C# 并选择 “Web”。
  3. 选择 ASP.NET Web 应用程序(.NET Framework)。
  4. 填写项目名称。 然后单击“确定”
  5. 从模板列表中选择 Azure 移动应用
  6. 单击“ 确定 ”以创建解决方案。
  7. 右键单击 解决方案资源管理器 中的项目,然后选择 “发布...”,然后选择 应用服务 作为发布目标。
  8. 按照提示进行身份验证,并选择新的或现有的 Azure 应用服务进行发布。

使用 Visual Studio 2015 创建 .NET 后端

安装 用于 .NET 的 Azure SDK (版本 2.9.0 或更高版本)以在 Visual Studio 中创建 Azure 移动应用项目。 安装 SDK 后,使用以下步骤创建 ASP.NET 应用程序:

  1. 打开 “新建项目 ”对话框(从 文件>新建>项目...)。
  2. 展开 模板>Visual C#,然后选择 “Web”。
  3. 选择 ASP.NET Web 应用程序
  4. 填写项目名称。 然后单击“确定”
  5. ASP.NET 4.5.2 模板下,选择 Azure 移动应用。 选择 云托管 以在云中创建一个移动后端,您可以将此项目发布到该后端。
  6. 单击“确定”。

如何:下载和初始化 SDK

SDK 在 NuGet.org 上可用。此包包含开始使用 SDK 所需的基本功能。 若要初始化 SDK,需要对 HttpConfiguration 对象执行作。

安装 SDK

若要安装 SDK,请在 Visual Studio 中右键单击服务器项目,选择“ 管理 NuGet 包”,搜索 Microsoft.Azure.Mobile.Server 包,然后单击“ 安装”。

初始化服务器项目

.NET 后端服务器项目的初始化类似于其他 ASP.NET 项目,其中包含一个 OWIN 启动类。 确保已引用 NuGet 包 Microsoft.Owin.Host.SystemWeb。 若要在 Visual Studio 中添加此类,请右键单击服务器项目并选择“ 添加新>”,然后选择 “Web>常规>OWIN 启动”类。 使用以下属性生成类:

[assembly: OwinStartup(typeof(YourServiceName.YourStartupClassName))]

Configuration() OWIN 启动类的方法中,使用 HttpConfiguration 对象配置 Azure 移动应用环境。 以下示例初始化没有添加功能的服务器项目:

// in OWIN startup class
public void Configuration(IAppBuilder app)
{
    HttpConfiguration config = new HttpConfiguration();

    new MobileAppConfiguration()
        // no added features
        .ApplyTo(config);

    app.UseWebApi(config);
}

若要启用单个功能,必须在调用 ApplyTo 之前在 MobileAppConfiguration 对象上调用扩展方法。 例如,以下代码将默认路由添加到初始化过程中具有该属性 [MobileAppController] 的所有 API 控制器:

new MobileAppConfiguration()
    .MapApiControllers()
    .ApplyTo(config);

Azure 门户中的服务器快速入门调用 UseDefaultConfiguration()。 这等效于以下设置:

    new MobileAppConfiguration()
        .AddMobileAppHomeController()             // from the Home package
        .MapApiControllers()
        .AddTables(                               // from the Tables package
            new MobileAppTableConfiguration()
                .MapTableControllers()
                .AddEntityFramework()             // from the Entity package
            )
        .AddPushNotifications()                   // from the Notifications package
        .MapLegacyCrossDomainController()         // from the CrossDomain package
        .ApplyTo(config);

使用的扩展方法包括:

  • AddMobileAppHomeController() 提供默认的 Azure 移动应用主页。
  • MapApiControllers() 为具有 [MobileAppController] 特性标记的 WebAPI 控制器提供自定义 API 功能。
  • AddTables() 提供 /tables 端点到表控制器的映射。
  • AddTablesWithEntityFramework() 是用于使用基于实体框架的控制器映射 /tables 终结点的简短方法。
  • AddPushNotifications() 提供为通知中心注册设备的简单方法。
  • MapLegacyCrossDomainController() 提供用于本地开发的标准 CORS 标头。

SDK 扩展

以下基于 NuGet 的扩展包提供了应用程序可以使用的各种移动功能。 使用 MobileAppConfiguration 对象在初始化期间启用扩展。

  • Microsoft.Azure.Mobile.Server.快速入门 支持基本的移动应用设置。 通过在初始化期间调用 UseDefaultConfiguration 扩展方法添加到配置。 此扩展包括以下扩展:通知、身份验证、实体、表、跨域和主页包。 此包由 Azure 门户上提供的移动应用快速入门使用。
  • Microsoft.Azure.Mobile.Server.Home 实现了网站根目录的默认页面,显示此移动应用已启动并正在运行。 通过调用 AddMobileAppHomeController 扩展方法添加到配置。
  • Microsoft.Azure.Mobile.Server.Tables 包括用于处理数据和设置数据管道的类。 通过调用 AddTables 扩展方法添加到配置。
  • Microsoft.Azure.Mobile.Server.Entity 使 Entity Framework 能够访问 SQL 数据库中的数据。 通过调用 AddTablesWithEntityFramework 扩展方法添加到配置。
  • Microsoft.Azure.Mobile.Server.Authentication 启用身份验证,并设置用于验证令牌的 OWIN 中间件。 通过调用 AddAppServiceAuthenticationIAppBuilder.UseAppServiceAuthentication 扩展方法,将其添加到配置中。
  • Microsoft.Azure.Mobile.Server.Notifications 启用推送通知并定义推送注册终结点。 通过调用 AddPushNotifications 扩展方法添加到配置。
  • Microsoft.Azure.Mobile.Server.CrossDomain 创建一个控制器,用于从移动应用向旧版 Web 浏览器提供数据。 通过调用 MapLegacyCrossDomainController 扩展方法添加到配置。
  • Microsoft.Azure.Mobile.Server.Login 提供 AppServiceLoginHandler.CreateToken() 方法,该方法是自定义身份验证方案中使用的静态方法。

如何:发布服务器项目

本部分介绍如何从 Visual Studio 发布 .NET 后端项目。 还可以使用 Git 或其中提供的任何其他方法部署后端项目。

  1. 在 Visual Studio 中,重新生成项目以还原 NuGet 包。

  2. 在解决方案资源管理器中,右键单击该项目,然后单击“ 发布”。 首次发布时,需要定义发布简介。 定义配置文件后,可以选择它并单击“ 发布”。

  3. 如果系统要求选择发布目标,请单击 “下一步”Microsoft Azure 应用服务>,然后使用 Azure 凭据登录(如果需要)。 Visual Studio 直接从 Azure 下载并安全地存储发布设置。

  4. 选择订阅,从“视图”中选择“资源类型”,展开“移动应用”,然后单击“移动应用后端”,然后单击“确定”。

  5. 验证发布配置信息,然后单击“发布”。

    移动应用后端成功发布后,您会看到一个显示发布成功的着陆页。

如何定义表控制器

定义表控制器以向移动客户端公开 SQL 表。 配置表控制器需要三个步骤:

  1. 创建数据传输对象 (DTO) 类。
  2. 在 Mobile DbContext 类中配置表引用。
  3. 创建表控制器。

数据传输对象 (DTO) 是继承自 EntityData的纯 C# 对象。 例如:

public class TodoItem : EntityData
{
    public string Text { get; set; }
    public bool Complete {get; set;}
}

DTO 用于定义 SQL 数据库中的表。 若要创建数据库条目,请将DbSet<>属性添加到您正在使用的 DbContext。 在 Azure 移动应用的默认项目模板中,DbContext 被称为 Models\MobileServiceContext.cs

public class MobileServiceContext : DbContext
{
    private const string connectionStringName = "Name=MS_TableConnectionString";

    public MobileServiceContext() : base(connectionStringName)
    {

    }

    public DbSet<TodoItem> TodoItems { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Add(
            new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>(
                "ServiceColumnTable", (property, attributes) => attributes.Single().ColumnType.ToString()));
    }
}

如果已安装 Azure SDK,现在可以创建模板表控制器,如下所示:

  1. 右键单击“控制器”文件夹,然后选择“ 添加>控制器...”
  2. 选择 “Azure 移动应用表控制器 ”选项,然后单击“ 添加”。
  3. “添加控制器 ”对话框中:
    • Model 类 下拉列表中,选择新的 DTO。
    • DbContext 下拉列表中,选择移动服务 DbContext 类。
    • 将为你创建控制器名称。
  4. 单击 添加

快速入门服务器项目包含一个简单的 TodoItemController 示例。

如何:调整表分页大小

默认情况下,Azure 移动应用为每个请求返回 50 条记录。 分页确保客户端不会过久占用其用户界面线程或服务器,以确保良好的用户体验。 若要更改表分页大小,请增加服务器端“允许的查询大小”和客户端页面大小。服务器端“允许的查询大小”使用 EnableQuery 属性进行调整:

[EnableQuery(PageSize = 500)]

确保 PageSize 与客户端请求的大小相同或更大。 有关更改客户端页面大小的详细信息,请参阅特定的客户端 HOWTO 文档。

如何:定义自定义 API 控制器

自定义 API 控制器通过公开终结点为移动应用后端提供最基本的功能。 可以使用 [MobileAppController] 属性注册特定于移动的 API 控制器。 该 MobileAppController 属性注册路由、设置移动应用 JSON 序列化程序,并启用 客户端版本检查

  1. 在 Visual Studio 中,右键单击“控制器”文件夹,然后单击“ 添加>控制器”,选择 “Web API 2 控制器”-“空 ”,然后单击“ 添加”。

  2. 提供 控制器名称,例如 CustomController,然后单击“ 添加”。

  3. 在新控制器类文件中,添加以下 using 语句:

     using Microsoft.Azure.Mobile.Server.Config;
    
  4. [MobileAppController] 属性应用于 API 控制器类定义,如以下示例所示:

     [MobileAppController]
     public class CustomController : ApiController
     {
           //...
     }
    
  5. 在 App_Start/Startup.MobileApp.cs 文件中,添加对 MapApiControllers 扩展方法的调用,如以下示例所示:

     new MobileAppConfiguration()
         .MapApiControllers()
         .ApplyTo(config);
    

还可以使用 UseDefaultConfiguration() 扩展方法,而不是 MapApiControllers()。 任何未应用 MobileAppControllerAttribute 的控制器仍可由客户端访问,但使用任何移动应用客户端 SDK 的客户端可能无法正确使用它。

如何进行身份验证工作

Azure 移动应用使用应用服务身份验证/授权来保护移动后端。 本部分介绍如何在 .NET 后端服务器项目中执行以下与身份验证相关的任务:

如何:向服务器项目添加身份验证

可以通过扩展 MobileAppConfiguration 对象并配置 OWIN 中间件,将身份验证添加到服务器项目。 安装 Microsoft.Azure.Mobile.Server.Quickstart 包并调用 UseDefaultConfiguration 扩展方法时,可以跳到步骤 3。

  1. 在 Visual Studio 中,安装 Microsoft.Azure.Mobile.Server.Authentication 包。

  2. 在Startup.cs项目文件中,在 Configuration 方法的开头添加以下代码行:

     app.UseAppServiceAuthentication(config);
    

    此 OWIN 中间件组件验证关联应用服务网关颁发的令牌。

  3. [Authorize] 属性添加到需要身份验证的任何控制器或方法。

若要了解如何向移动应用后端对客户端进行身份验证,请参阅 向应用添加身份验证

如何:对应用程序使用自定义身份验证

重要

若要启用自定义身份验证,必须先启用应用服务身份验证,而无需在 Azure 门户中为应用服务选择提供程序。 这将在托管时启用WEBSITE_AUTH_SIGNING_KEY环境变量。

如果不想使用某个应用服务身份验证/授权提供程序,则可以实现自己的登录系统。 安装 Microsoft.Azure.Mobile.Server.Login 包,以帮助生成身份验证令牌。 提供自己的代码来验证用户凭据。 例如,可以检查数据库中的加盐密码和哈希密码。 在下面的示例中, isValidAssertion() 方法(在其他位置定义)负责这些检查。

通过创建 ApiController 并公开registerlogin动作来公开自定义身份验证。 客户端应使用自定义 UI 从用户收集信息。 然后,使用标准 HTTP POST 调用将信息提交到 API。 服务器验证断言后,将使用该方法 AppServiceLoginHandler.CreateToken() 颁发令牌。 ApiController 不应 使用 [MobileAppController] 特性。

一个示例操作:

    public IHttpActionResult Post([FromBody] JObject assertion)
    {
        if (isValidAssertion(assertion)) // user-defined function, checks against a database
        {
            JwtSecurityToken token = AppServiceLoginHandler.CreateToken(new Claim[] { new Claim(JwtRegisteredClaimNames.Sub, assertion["username"]) },
                mySigningKey,
                myAppURL,
                myAppURL,
                TimeSpan.FromHours(24) );
            return Ok(new LoginResult()
            {
                AuthenticationToken = token.RawData,
                User = new LoginResultUser() { UserId = userName.ToString() }
            });
        }
        else // user assertion was not valid
        {
            return this.Request.CreateUnauthorizedResponse();
        }
    }

在前面的示例中,LoginResult 和 LoginResultUser 是公开所需属性的可序列化对象。 客户期望登录响应以 JSON 对象的形式返回。

    {
        "authenticationToken": "<token>",
        "user": {
            "userId": "<userId>"
        }
    }

该方法 AppServiceLoginHandler.CreateToken() 包括 访问群体颁发者 参数。 这两个参数都设置为使用 HTTPS 方案的应用程序根的 URL。 同样,应将 secretKey 设置为应用程序的签名密钥的值。 请勿在客户端中分发签名密钥,因为它可用于挖掘密钥和模拟用户。 可以通过引用 WEBSITE_AUTH_SIGNING_KEY 环境变量,在应用服务中托管时获取签名密钥。 如果需要本地调试,请遵循 “带身份验证的本地调试” 部分中的说明来检索密钥并将其存储为应用程序设置。

颁发的令牌还可能包括其他声明和到期日期。 至少,颁发的令牌必须包含主题(sub)声明。

您可以通过重载身份验证路由来支持标准客户端loginAsync()方法。 如果客户端调用 client.loginAsync('custom'); 登录,则路由必须是 /.auth/login/custom。 可以使用以下命令为自定义身份验证控制器 MapHttpRoute()设置路由:

config.Routes.MapHttpRoute("custom", ".auth/login/custom", new { controller = "CustomAuth" });

小提示

使用loginAsync()方法可确保每次后续调用服务时,都会附加身份验证令牌。

如何:检索经过身份验证的用户信息

当应用服务对用户进行身份验证时,可以访问 .NET 后端代码中分配的用户 ID 和其他信息。 用户信息可用于在后端做出授权决策。 以下代码获取与请求关联的用户 ID:

// Get the SID of the current user.
var claimsPrincipal = this.User as ClaimsPrincipal;
string sid = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value;

SID 派生自提供程序特定的用户 ID,对于给定用户和登录提供程序是静态的。 对于无效的身份验证令牌,SID 为 null。

应用服务还允许你从登录提供程序请求特定声明。 每个标识提供者都可以使用标识提供者 SDK 提供更多信息。 例如,可以使用 Facebook 图形 API 获取好友信息。 可以在 Azure 门户的提供程序页面中指定所需的声明。 某些主张需要与标识提供者进行额外配置。

以下代码调用 GetAppServiceIdentityAsync 扩展方法以获取登录凭据,其中包括针对 Facebook Graph API 发出请求所需的访问令牌:

// Get the credentials for the logged-in user.
var credentials =
    await this.User
    .GetAppServiceIdentityAsync<FacebookCredentials>(this.Request);

if (credentials.Provider == "Facebook")
{
    // Create a query string with the Facebook access token.
    var fbRequestUrl = "https://graph.facebook.com/me/feed?access_token="
        + credentials.AccessToken;

    // Create an HttpClient request.
    var client = new System.Net.Http.HttpClient();

    // Request the current user info from Facebook.
    var resp = await client.GetAsync(fbRequestUrl);
    resp.EnsureSuccessStatusCode();

    // Do something here with the Facebook user information.
    var fbInfo = await resp.Content.ReadAsStringAsync();
}

添加 using 语句System.Security.Principal以提供GetAppServiceIdentityAsync扩展方法。

如何:限制授权用户的数据访问

在上一部分中,我们演示了如何检索经过身份验证的用户的用户 ID。 可以根据此值限制对数据和其他资源的访问。 例如,将 userId 列添加到表并按用户 ID 筛选查询结果是一种将返回的数据限制为仅授权用户的简单方法。 以下代码仅在 SID 与 TodoItem 表的 UserId 列中的值匹配时返回数据行:

// Get the SID of the current user.
var claimsPrincipal = this.User as ClaimsPrincipal;
string sid = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value;

// Only return data rows that belong to the current user.
return Query().Where(t => t.UserId == sid);

Query()方法返回一个可通过LINQ操控以进行筛选的IQueryable对象。

如何:向服务器项目添加推送通知

通过扩展 MobileAppConfiguration 对象并创建通知中心客户端,将推送通知添加到服务器项目。

  1. 在 Visual Studio 中,右键单击服务器项目,然后单击 管理 NuGet 包,搜索 Microsoft.Azure.Mobile.Server.Notifications,然后单击 安装

  2. 重复此步骤以安装 Microsoft.Azure.NotificationHubs 包,其中包括通知中心客户端库。

  3. 在App_Start/Startup.MobileApp.cs中,并在初始化期间添加对 AddPushNotifications() 扩展方法的调用:

     new MobileAppConfiguration()
         // other features...
         .AddPushNotifications()
         .ApplyTo(config);
    
  4. 添加创建通知中心客户端的以下代码:

     // Get the settings for the server project.
     HttpConfiguration config = this.Configuration;
     MobileAppSettingsDictionary settings =
         config.GetMobileAppSettingsProvider().GetMobileAppSettings();
    
     // Get the Notification Hubs credentials for the Mobile App.
     string notificationHubName = settings.NotificationHubName;
     string notificationHubConnection = settings
         .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString;
    
     // Create a new Notification Hub client.
     NotificationHubClient hub = NotificationHubClient
         .CreateClientFromConnectionString(notificationHubConnection, notificationHubName);
    

现在可以使用通知中心客户端将推送通知发送到已注册的设备。 有关详细信息,请参阅 向应用添加推送通知。 若要了解有关通知中心的详细信息,请参阅 通知中心概述

如何:使用标记启用定向推送

通知中心允许使用标记将目标通知发送到特定注册。 自动创建多个标记:

  • 安装 ID 标识特定设备。
  • 基于经过身份验证的 SID 的用户 ID 标识特定用户。

可以从 MobileServiceClient 上的 installationId 属性访问安装 ID。 以下示例演示如何使用安装 ID 将标记添加到通知中心中的特定安装:

hub.PatchInstallation("my-installation-id", new[]
{
    new PartialUpdateOperation
    {
        Operation = UpdateOperationType.Add,
        Path = "/tags",
        Value = "{my-tag}"
    }
});

创建安装时,后端将忽略客户端在推送通知注册期间提供的任何标记。 若要使客户端能够将标记添加到安装,必须创建一个使用上述模式添加标记的自定义 API。

有关示例,请参阅应用服务移动应用中的 客户端添加的推送通知标签 已完成快速入门示例。

如何:向经过身份验证的用户发送推送通知

当经过身份验证的用户注册推送通知时,用户 ID 标记会自动添加到注册中。 使用此标记,可以将推送通知发送到该人员注册的所有设备。 以下代码获取发出请求的用户的 SID,并向该人员的每个设备注册发送模板推送通知:

// Get the current user SID and create a tag for the current user.
var claimsPrincipal = this.User as ClaimsPrincipal;
string sid = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value;
string userTag = "_UserId:" + sid;

// Build a dictionary for the template with the item message text.
var notification = new Dictionary<string, string> { { "message", item.Text } };

// Send a template notification to the user ID.
await hub.SendTemplateNotificationAsync(notification, userTag);

从经过身份验证的客户端注册推送通知时,请确保在尝试注册之前完成身份验证。 有关详细信息,请参阅应用服务移动应用中 推送给用户 的 .NET 后端快速入门示例。

如何调试和排查 .NET SDK 服务器的问题

Azure 应用服务为 ASP.NET 应用程序提供了多种调试和故障排除技术:

伐木业

可以使用标准 ASP.NET 跟踪写入方法,将信息写入应用服务的诊断日志。 在写入日志之前,必须在移动应用后端中启用诊断。

若要启用诊断并写入日志,请执行以下作:

  1. 按照 启用应用程序日志记录(Windows)中的步骤进行操作。

  2. 在代码文件中添加以下 using 语句:

     using System.Web.Http.Tracing;
    
  3. 创建跟踪编写器以从 .NET 后端写入诊断日志,如下所示:

     ITraceWriter traceWriter = this.Configuration.Services.GetTraceWriter();
     traceWriter.Info("Hello, World");
    
  4. 再次发布服务器项目,访问移动应用程序的后端,并使用日志记录执行代码路径。

  5. 下载并评估日志,如 Access 日志文件中所述。

使用身份验证进行本地调试

可以在本地运行应用程序,在将更改发布到云之前对其进行测试。 对于大多数 Azure 移动应用后端,在 Visual Studio 中按 F5 。 但是,使用身份验证时还有其他一些注意事项。

必须配置了应用服务身份验证/授权的基于云的移动应用,并且客户端必须具有指定为备用登录主机的云终结点。 有关所需的特定步骤,请参阅客户端平台的文档。

确保移动后端已安装 Microsoft.Azure.Mobile.Server.Authentication 。 然后,在应用程序的 OWIN 启动类中,在MobileAppConfiguration已应用于HttpConfiguration之后,添加以下内容:

    app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions()
    {
        SigningKey = ConfigurationManager.AppSettings["authSigningKey"],
        ValidAudiences = new[] { ConfigurationManager.AppSettings["authAudience"] },
        ValidIssuers = new[] { ConfigurationManager.AppSettings["authIssuer"] },
        TokenHandler = config.GetAppServiceTokenHandler()
    });

在前面的示例中,应使用 HTTPS 方案将 Web.config 文件中的 authAudienceauthIssuer 应用程序设置配置为应用程序根的 URL。 同样,应将 authSigningKey 设置为应用程序的签名密钥的值。 若要获取签名密钥,请执行以下作:

  1. 请在Azure 门户中导航至您的应用
  2. 单击 “工具”、“ Kudu”、“ Go”。
  3. 在 Kudu 管理站点中,单击“ 环境”。
  4. 查找 WEBSITE_AUTH_SIGNING_KEY的值。

在本地应用程序配置中使用 authSigningKey 参数的签名密钥。移动后端现在已准备好在本地运行时验证令牌,客户端从基于云的终结点获取令牌。