繁体   English   中英

Azure函数-从Azure SQL服务器中的Blob存储导入bacpac文件-AAD令牌

[英]Azure function - Import bacpac file from blob storage in Azure sql server - AAD token

我们希望通过Azure函数(即Blob触发函数)将bacpac文件从Blob存储导入Azure SQL服务器。

我们实现了如下

    log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");

var apimUrl = "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sqlRG/providers/Microsoft.Sql/servers/sqldev/import?api-version=2014-04-01";

var content = "{'databaseName': 'TestDbImport'," +
    "'edition': 'Basic'," +
    "'serviceObjectiveName': 'Basic'," +
    "'maxSizeBytes': '2147483648'," +
    "'storageKeyType': 'SharedAccessKey'," +
    "'storageKey': 'xxxxxxx'," +
    "'storageUri': 'https://account.blob.core.windows.net/sql-backup/test.bacpac'," +
    "'administratorLogin': 'user'," +
    "'administratorLoginPassword': 'password'," +
    "'authenticationType': 'SQL'}";

HttpClient Client = new HttpClient();

var AADToken = "token";

Client = new HttpClient();
Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AADToken);
Client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key","subKey");
var foo = Client.PostAsync(apimUrl, new StringContent(content.ToString())).Result;
log.Info($"result: {foo}");

我需要帮助来了解如何获取AADToken以及需要传入标头以验证此请求的subKey(也很困惑,为什么我需要在Azure自身内部执行所有操作时进行身份验证)

如果我没有通过标题,则会得到401(未经授权)错误代码。

不用说,您将需要为请求提供有效的承载令牌。 您有几种选择来请求令牌。

托管服务身份

托管服务身份是去年推出的相对较新的内容。 可以将它们视为您的应用程序的服务帐户,从而使它们可以与其他应用程序进行通信。 它实质上是抽象了一些复杂性和手动步骤,以使用Azure AD Apps进行设置和身份验证(请参见下文)。 可以在https://docs.microsoft.com/zh-cn/azure/app-service/app-service-managed-service-identity中找到更多详细信息。 托管服务身份正在迅速成为默认的最佳实践,蔚蓝资源彼此进行身份验证。

Azure AD应用程序

这是从任何服务(云或本地)中访问令牌的传统方式:

  • 设置您的应用程序将用来通过其请求令牌的Azure AD应用程序。 Azure AD基于OAuth,它支持多种请求令牌的方法。 由于您的应用程序无需用户交互即可执行的性质,您将需要使用不需要用户的授予流,例如客户端凭据授予(从Azure AD中的完全信任应用程序开始)。 您的Azure AD应用程序将需要适当的权限才能使用您的资源。

  • 我建议使用客户端库来协助进行各种身份验证流程。 .Net中最常见的一个是各种ADAL库( https://docs.microsoft.com/zh-cn/azure/active-directory/develop/active-directory-authentication-libraries

  • 将该库与您的Azure AD应用程序特定设置(客户端ID,客户端密钥等)结合使用,以请求令牌。 该令牌将作为HTTP请求中标头的一部分传入。 归根结底,如果您将ADAL库用于.net,则您的代码将如下所示以请求令牌:


AuthenticationContext authenticationContext = new 
AuthenticationContext("https://login.microsoftonline.com/<tenantId>");
AuthenticationResult result = await 
authenticationContext.AcquireTokenAsync("https://resourceUrl",
                                                    clientCredential);

这些是一些相当高级的步骤。 无论是直接使用Azure AD应用程序还是通过托管服务帐户,都需要提供对正在使用的资源的访问权限。 如果您对特定的步骤/选项有疑问,我建议您创建一个新问题,因为它们不是特定于Azure Functions的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM