我们宣布,Azure 媒体服务本月开始支持Azure Active Directory(AAD)身份验证。REST API和.NET客户端库的客户现在可以使用AAD身份验证来对授权请求。此外,我们在Azure 门户中发布新的管理选型卡,简化通过AAD进行用户和服务主体认证的过程。

随着本次REST API更新的发布,我们现在可以提供与Azure资源管理(ARM)服务相同的基于角色的访问管理(RBAC)。通过转到AAD身份验证,您还可以跟踪和审核连接到媒体服务帐户的特定用户或应用程序所做的所有更改。新的Azure 媒体 REST API要求,提REST API请求的用户或应用程序必须对其管理的资源具有贡献者或所有者级别的访问权限。有关基于角色的访问控制如何用于Azure资源,请参阅基于角色的Azure访问控制

重要说明!现提前12个月提醒您Azure媒体服务将终止对ACS身份验证的支持

Azure Active Directory(AAD)提供强大的基于角色的访问控制功能,与ACS令牌验证模型(“帐户密钥”)相比,对您帐户中的资源支持更精细的访问,我们强烈建议您更新代码,并在2018年6月22日之前从ACS迁移到基于AAD的认证。此外,此次快速迁移的一个主要原因是即将弃用基于ACS密钥的认证系统。

这对你意味着什么?

  • Microsoft Azure 媒体服务将于2018年6月22日终止对基于访问控制服务(ACS)身份验证的支持。
  • 为提供您更新应用程序充足的时间,我们现提前12个月通知您以确保此过渡的平稳进行。

你应该采取什么措施?

我们建议您在2018年6月22日前采取以下措施,确保您的应用程序持续如期运转:

  • 为您媒体服务授权的应用程序更新代码
  • 对基于ACS的身份验证进行迁移
  • 开始使用基于AAD的身份验证。

用户必须在2018年6月22日前进行迁移,确保使用ACS认证令牌为媒体服务认证的应用程序如期正常运转,不会在生产中出现故障。请仔细查看下面每个新的身份验证方案,采取适当的措施在源代码中使用AAD身份验证进行更新。

Azure 媒体服务REST API支持交互式用户和Web API,中间层或守护进程的身份验证。以下部分提供有关如何直接使用REST API或通过.NET客户端库使用AAD身份验证的详细信息。

在媒体服务中使用AAD进行用户验

如果您正在为Azure媒体服务帐户构建一个管理应用程序,例如Azure 服务媒体 Explorer工具,您可以通过门户访问控制(IAM)选项卡,凭借授权访问媒体服务资源的用户凭据进行登录。如果您希望与以下任一场景的服务进行人际交互,此类解决方案非常有用:

  • 为编码作业监控仪表板
  • 为现场直播监控仪表板
  • 为桌面或移动用户管理应用程序,用于管理媒体服务帐户中的资源。

本机应用程序首先从AAD获取访问令牌,然后使用该访问令牌进行所有REST API调用。下图显示了典型的交互式应用程序身份验证流程。要使RESTAPI请求成功,调用用户必须是其试图访问的Azure 媒体服务帐户的“贡献者”或“所有者”。 未经授权的请求将失败,状态代码为401。如果看到此错误,请仔细检查您是否将用户配置为媒体服务帐户中的“贡献者”或“所有者”。您可以在Azure门户中通过搜索媒体帐户并点击“访问控制”选项卡进行检查。

使用.NET客户端SDK的用户必须升级到Nuget的最新版本(windowsazure.mediaservices 4.0.0.4或更高版本),使用AAD身份验证与REST请求进行通信。以下示例显示了先前使用ACS的.NET客户端SDK,而之后使用AAD凭据进行身份验证之间的差异。

注意:应用程序还需要更新其引用以包括新的程序集”Microsoft.WindowsAzure.MediaServices.Client.Common.Authentication.dll”并添加对该命名空间的引用以及对″Microsoft.IdentityModel.Clients.ActiveDirectory“程序集的引用,以访问ITokenProvider接口。

有关使用带有AAD的.NET SDK的更多信息和详细示例,请参阅此概述和可用的environment settings(环境设置)constants(常量)

使用ACS证书认证的弃用方法

// Create and cache Media Services credentials in a static class variable.

_cachedCredentials = new MediaServicesCredentials(

_mediaServicesAccountName,

_mediaServicesAccountKey,

“urn:windowsazuremediaservices”,

“https://wamsprodglobal001acs.accesscontrol.windows.net”);

// Used the cached credentials to create CloudMediaContext.

var mediaContext = new CloudMediaContext(_cachedCredentials);

mediaContext.Assets.FirstOrDefault();

使用AAD凭证和用户身份验证的新认证方法

var tokenCredentials = new AzureAdTokenCredentials(“{YOUR AAD TENANT DOMAIN HERE}”, AzureEnvironments.AzureCloudEnvironment);

var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

var mediaContext = new CloudMediaContext(new Uri(“YOUR REST API ENDPOINT HERE”), tokenProvider);

mediaContext.Assets.FirstOrDefault()  // This would return a 401 unauthorized if you are not set up as an authorized user

“AzureEnvironments.AzureCloudEnvironment”常量是.NET SDK中的助手,可为公共Azure数据中心获取正确的环境变量设置。它包含预定义的环境设置,仅用于在公共数据中心访问媒体服务。对于主权或政府云区域,您可以分别使用“AzureChinaCloudEnvironment”,“AzureUsGovernmentEnvrionment”或“AzureGermanCloudEnvironment”。

AzureAdTokenProviderAzureAdTokenCredentials类中,有许多有关获取AAD访问令牌的详细信息已被包装和简化。例如,您不需要提供AAD权限,媒体服务资源URI或本机AAD应用程序详细信息。这些是已经由AAD访问令牌提供程序类配置的众所周知的值。如果您不使用我们的.NET客户端SDK,建议使用ADAL来简化使用这些参数创建访问令牌请求。在AzureAdTokenProviderAzureAdTokenCredentials类中默认使用以下值。

您还可以选择用您自己的实现替换AzureAdTokenProvider的默认实现。

媒体服务中的AAD服务主体认证

对于不需要通过守护进程服务,Web API,消费者(移动或桌面)和Web应用程序进行非人际互动的交互式登录或媒体服务帐户中的直接用户管理/资源监控,您需要先在自己的租户中创建一个Azure Active Directory(活动目录)应用程序。

创建后,您必须为访问控制(IAM)选项卡中的媒体服务帐户授予此应用程序“贡献者”或“所有者”级别的权限。这两个步骤都可以通过Azure Portal或Azure CLI或PowerShell脚本轻松完成。请注意,对于AAD资源,“贡献者”具有与“所有者”相同的资源访问权限,但只有“所有者”角色可以对其他用户授予访问权限。目前,这个版本的Media Services REST API并没有在实体级提供RBAC,我们将在秋季进行API更新。我们还在您的媒体服务帐户中提供了新的“API访问”选项卡,以便轻松生成所需的应用程序或从现有应用程序中进行选择。如果您要使用x509证书,或ClientID和ClientKey,可以参考详细文档,了解如何配置SDK。

以下示例显示守护进程如何使用AAD Web应用程序凭据来验证REST服务的请求。

使用ACS证书进行身份验证的弃用方式

// Create and cache Media Services credentials in a static class variable.

_cachedCredentials = new MediaServicesCredentials(

_mediaServicesAccountName,

_mediaServicesAccountKey,

“urn:windowsazuremediaservices”,

“https://wamsprodglobal001acs.accesscontrol.windows.net”);

// Used the cached credentials to create CloudMediaContext.

var mediaContext = new CloudMediaContext(_cachedCredentials);

使用AAD服务主体和客户端对称密钥进行认证的新方法

var tokenCredentials = new AzureAdTokenCredentials(“{YOUR AAD TENANT DOMAIN HERE}”, new AzureAdClientSymmetricKey(“{YOUR CLIENT ID HERE}”, “{YOUR CLIENT SECRET}”), AzureEnvironments.AzureCloudEnvironment);

var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

var mediaContext = new CloudMediaContext(_mediaServicesApiServerUri, tokenProvider);

mediaContext.Assets.FirstOrDefault();

轻松开始使用新的API 访问选项卡

对于不熟悉AAD细节的用户,Azure Active Directory(活动目录)身份验证可能很复杂,我们希望仅有很少的AAD知识也可以轻松开始。因此,我们正在门户中为媒体服务帐户引入新的“API访问”选项卡,来替代以前的ACS“帐户密钥”选项卡。我们还禁用旋转ACS密钥的功能,以促使用户更新代码并转移到AAD支持。

新的API 访问选项卡使得Azure Media Services与AAD的连接过程更简单。当您首次选择API访问选项卡时,将看到可以选择使用用户身份验证进行人际交互式管理应用程序,也可以创建一个服务主体和AAD应用程序,用于与媒体服务API进行非人际交互。

当选择基于用户的身份验证选项时,您将看到一个新的面板,其中包含使用API进行身份验证所需的所有活动目录信息。这包括需要调用的API端点,以及ClientID,域和资源。

对于服务主体身份验证,您将看到其他值,以及从现有的AAD应用程序中进行选择或直接在面板中创建新的AAD应用程序的功能。

当服务主体选项卡打开时,它将选择满足以下条件的第一个AAD应用程序:

  • 注册的AAD应用程序
  • 该帐户拥有“贡献者”或“所有者”RBAC权限

创建或选择AAD应用程序后,您将能够创建并复制密钥(客户机密钥),并复制在此场景中获取访问令牌所需的客户端ID(应用程序ID)。

在此选项卡中,您可以选择“创建新的”AAD应用程序,或从订阅中的现有的应用程序中进行选择。选择现有应用程序时,您将看到一个新的选项卡,列出现有应用程序以供选择。

从现有应用程序中选择或创建新应用程序后,您将看到“管理权限”或“管理应用程序”的其它按钮。您可以使用这些设置直接打开AAD应用程序管理选项卡,以执行管理任务,例如更改密钥或回复URL,或自定义应用程序清单。

单击“管理应用程序”按钮将弹出AAD应用程序管理选项卡,允许您使用此应用程序创建与API一起使用的密钥。

如果您没有在域中创建AAD应用程序的权限,则不会显示选项卡的AAD应用程序控件,而是显示警告消息。

媒体服务客户的后续步骤和操作

我们非常高兴能够从较旧的基于ACS密钥的身份验证过渡到更安全,灵活和基于角色的Azure Active Directory(活动目录)服务。所有Azure 媒体服务客户应立即开始迁移,通过下载最新的.NET SDK或更新现有的基于REST的API调用来使用新的基于AAD的身份验证模型。

此外,我们正在开发新版本的REST API,并支持使用AAD认证的更多客户端SDK语言。有关该更新的API的更多详细信息,参见后续的博客文章。

你目前应该采取的关键行动:

  1. 如果您使用.NET,请更新到最新的SDK并迁移到AAD认证。
  2. 提前规划媒体服务 API中的ACS身份验证支持的弃用。旧的ACS认证支持将于2018年6月22日正式关闭。

关于Java SDK和开源和社区驱动客户端SDK的注意事项

如果您正在使用Java SDK或许多社区或开放源代码生成的客户端SDK用于媒体服务,您目前有几个选项。现有的用于媒体服务的Java SDK将在未来几个月内更新,以支持AAD身份验证,以便客户立即开始迁移。对于开源库,由于媒体服务团队不支持,您需要与社区SDK开发人员合作来优先更新SDK,以便为您的方案支持AAD。我们还建议您长时间保持社区SDK,与开发人员沟通,并与他们一起更新他们的库。此外,我们正在努力在本夏季/秋季推出更新的REST API(v3),以支持AutoRest生成的跨PHP,Java,Python等的客户端SDK,从而支持AAD认证。我们将跟进更多博客,当其准备好预览时,可迁移到新的v3 API和客户端SDK。

资源和更多文档

有关详细信息,示例代码和具体情景文档,请参阅以下文章:

若有问题,请联系我们

如您对此次迁移有任何问题,请在此处提交支持工单或拨打世纪互联热线400-089-0365.