当我试图使用分配了托管标识的系统在Azure Function应用程序中调用Azure函数以从Azure存储容器中获取blob时,我遇到了:
system.private.corelib:执行函数时出现异常:
[FunctionName("TestFetchTileViaSvcPrinId")]
public static async Task<HttpResponseMessage> RunAsync(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log) {
log.LogInformation("C# HTTP trigger function processed a request.");
const string blobName = "https://<storageaccount>.blob.core.windows.net/...path.../<file>.jpg";
// Get the initial access token and the interval at which to refresh it.
var azureServiceTokenProvider = new AzureServiceTokenProvider();
NewTokenAndFrequency tokenAndFrequency = TokenRenewerAsync(azureServiceTokenProvider, CancellationToken.None).GetAwaiter().GetResult();
// Create storage credentials using the initial token, and connect the callback function to renew the token just before it expires
var tokenCredential = new TokenCredential(tokenAndFrequency.Token, TokenRenewerAsync, azureServiceTokenProvider, tokenAndFrequency.Frequency.Value);
var storageCredentials = new StorageCredentials(tokenCredential);
var cloudBlockBlob = new CloudBlockBlob(new Uri(blobName), storageCredentials);
using (var memoryStream = new MemoryStream()) {
await cloudBlockBlob.DownloadToStreamAsync(memoryStream); // Unauthorized exception is thrown here
var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) {
Content = new ByteArrayContent(memoryStream.ToArray())
};
httpResponseMessage.Headers.Add("Cache-Control", "max-age=31536000"); //31536000 seconds ~ 1 year
httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
return httpResponseMessage;
}
}
我搞定了。正如Rohit所注意到的,经过编辑的blob完整路径(如最初发布的)错误地指定了Azure函数路径,而不是存储帐户路径。我后来解决了这个问题。然而,我在实现的路径中确实有一个错别字。更正路径解决了问题。
在v11SDK. NET中,我能够使用托管标识令牌来访问Azure blob: 现在我想切换到v12 SDK,但不知道如何对BlobServiceClient进行同样的操作。
我正在尝试使用托管标识从Azure Windows VM访问Azure存储资源。 我已经按照这里的指示做了https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-vm-windows-access-storage但本教程中的访问部分是使用完成的。NET,这
现在我正在使用AAD应用程序使服务成为= AAD应用程序 流程如下所示: 服务A:从托管标识获取令牌 服务A:转到KeyVault,出示令牌并获取AAD应用程序的秘密 服务A:转到AAD,提供一个秘密并为特定资源请求一个令牌 服务A:拨打服务B 服务B:验证令牌和资源 我想知道是否可以向我的服务注册托管标识,因此如果提供托管标识令牌,则服务B可以信任服务A。类似于这样: 服务A:从托管身份获取令牌
我在Azure中设置了两个应用程序服务。”父级和子级都公开APIendpoint。 子节点有endpointGet。 父节点有endpoint“获取”和“获取儿童”(使用HttpClient在儿童上调用“获取”)。 我希望所有子endpoint都需要通过托管身份和AAD进行身份验证,并且我希望所有父endpoint都允许匿名。但是在Azure中,我希望将父应用服务设置为具有调用子应用服务的权限。因
我试图使用托管标识从API管理实例调用Azure函数。我已为我的APIM实例设置了系统管理的标识。我已将参与者角色授予Azure Function应用程序上的此身份。我还将应用程序服务身份验证更改为AD。 现在我尝试从API调用该函数。 我有两个问题: 第一个:当我使用身份验证管理身份策略来获取令牌时,我得到了一个错误,当我使用受众https://myfunctionapp.azurewebsit