使用RBAC连接到Azure服务总线已停止工作



我正在使用托管身份连接到Azure服务总线,它过去工作得很好。

今天早上,我意识到这种方法在本地(使用Visual Studio(和部署的应用程序(使用托管标识(上都不再有效。

我有一个自定义令牌提供商类:

public class AzureServicebusManagedIdentityTokenProvider : TokenProvider
{
private const string Resource = "https://servicebus.azure.net/";
protected readonly string TenantId;
public AzureServicebusManagedIdentityTokenProvider(string tenantId = null)
{
TenantId = string.IsNullOrWhiteSpace(tenantId) ? null : tenantId;
}
public override async Task<SecurityToken> GetTokenAsync(string appliesTo, TimeSpan timeout)
{
string accessToken = await GetAccessToken(Resource);
return new JsonSecurityToken(accessToken, appliesTo);
}
private async Task<string> GetAccessToken(string resource)
{
var authProvider = new AzureServiceTokenProvider();
return await authProvider.GetAccessTokenAsync(resource, TenantId);
}
}

然后例如发送一条消息:

var sbMessageSender = new MessageSender(new ServiceBusConnection("<my connectionstring>")
{
TransportType = TransportType.Amqp,
TokenProvider = new AzureServicebusManagedIdentityTokenProvider("<my tenant id>")
}, "my queue name", RetryPolicy.Default);
var json = JsonConvert.SerializeObject(<message to send>);
var message = new Message(Encoding.UTF8.GetBytes(json));
await sbMessageSender.SendAsync(message);

引发此错误:

Put token failed. status-code: 401, status-description: InvalidIssuer: Token issuer is invalid. TrackingId:5c6c17c7-7a9e-49f3-adf7-5dbfb35b3daf, SystemTracker:NoSystemTracker, Timestamp:2019-10-29T08:56:17.

我已检查我是否具有"Azure服务总线数据所有者"角色,以及visual studio中的"Azure应用程序身份验证"工具是否设置为适当的帐户。

我正在使用这些nuget包:

  • Microsoft.Azure.Services.AppAuthenticationv1.3.1
  • Microsoft.Azure.ServiceBusv3.4.0

不确定我是否在做一些愚蠢的事情(就像过去一样(,但任何帮助都将不胜感激。

这似乎是由于Azure中的一个问题引起的。根据我的支持票上的回复:

。。。此问题是由最新的服务更新引起的,其中命名空间的后端订阅ID信息存在同步问题。只有在更新命名空间时才会发生这种情况。由于RBAC身份验证依赖于使用存储的订阅ID构建ARM资源ID,因此您看到了身份验证问题。该问题现已解决,不应再次发生。

最新更新