Azure Blob 的身份验证和授权方式

时间:2021-01-25 19:29:49

标签: azure-active-directory

在我的 azure blob 存储中,我有一个容器,其中有多个文件夹,文件夹名称为项目名称,每个文件夹都有一个 metadata.json 文件以及第一级的子文件夹。

Blob Container --> Folder A, FolderB
Folder A --> metadata.json, subfolder(s)
Folder B --> metadata.json, subfolders(s)..

现在,我创建了一个 Powershell commandlet,用于获取项目的 blob 元数据文件。 因此,如果它类似于 Get-Documents -Project "FolderA" 并且我从文件夹 A 中的 metadata.json 中获取所有信息。为此,我将 Blob 存储帐户、SAS 令牌和容器存储在解决方案的配置文件中.

展望未来,我想让它更安全,并希望我的客户,如果他们调用 Get-Documents 命令,应该提示用户登录提示,一旦他们的身份验证通过,即他们在组织活动目录中,并且有Blob 文件夹的权限,他们应该能够获取元数据信息。

我该如何开始?如果有人可以指导我正确的文档或分享类似的解决方案(如果实施)。

1 个答案:

答案 0 :(得分:0)

您可以使用 Azure AD 访问 Azure blob 存储,并使用 Rest API 获取 Blob。

Powershell 代码示例:

# login
Connect-AzAccount

# get accessToken
$resource = "https://storage.azure.com/"
$context = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext
$accessToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, $resource).AccessToken

#request REST API
$uri = "https://<myaccount>.blob.core.windows.net/<mycontainer>/<myblob>"

$xmsdate = get-date
$xmsdate = $xmsdate.ToUniversalTime()
$xmsdate = $xmsdate.toString('r')

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("x-ms-version", "2019-12-12")
$headers.Add("x-ms-date", $xmsdate)
$headers.Add("Authorization", "Bearer " + $accessToken)

Invoke-RestMethod -Method 'Get' -Uri $uri -Headers $headers

有关详细信息,请参阅 here。它会帮助你理解。

相关问题