Подтвердить что ты не робот

Асинхронные служебные шинные операции Повышение тайм-аута Исключение вместо UnauthorizedAccessException с использованием ACS

Я использую службу контроля доступа для авторизации доступа к определенным подпискам на служебную шину для определенных идентификаторов службы.

При получении сеансов или сообщений из подписки идентификатор службы авторизируется и может получать и завершать или оставлять сообщения по мере необходимости.

Тем не менее, я не вижу UnauthorizedAccessException при попытке получить доступ к подписке, к которой идентификатор службы не имеет доступа, и я не вижу этого исключения при попытке выполнить операцию, которую Группа правил не выдала для этой служебной идентификационной и доверяющей стороны (например, Отправить сообщение или создать тему).

Вместо этого я в конце концов вижу TimeoutException - "The timeout elapsed upon attempting to obtain a token while accessing 'https://namespace-sb.accesscontrol.windows.net/WRAPv0.9/'". Внутреннее исключение - SecurityTokenException - "The token provider was unable to provide a security token while accessing 'https://namespace-sb.accesscontrol.windows.net/WRAPv0.9/'. Token provider returned message: 'The operation has timed out'". Это вызывает проблему для RetryPolicy, поскольку исключение Timeout считается переходным.

Странно, однако, я получаю UnauthorizedAccessException при попытке получить описание подписки. Что-то, что в соответствии с Права, необходимые для операций служебной шины, должно быть доступно для идентификаторов служб с помощью запроса на прослушивание в области... myTopic/Subscriptions/mySubscription.

У меня есть следующая настройка:

Я вижу следующие проблемы:

var manager = NamespaceManager.CreateFromConnectionString("Endpoint=sb://namespace.servicebus.windows.net/;SharedSecretIssuer=testidentity;SharedSecretValue=SSdtIE5vdCBUZWxsaW5n=");
var description = manager.GetSubscription("myTopic","mySubscription");

Результаты в UnauthoriszedAccessException - "The remote server returned an error: (401) Unauthorized." Я ожидаю, что вы сможете получить описание, а не получать это исключение. Интересно, что это единственная область, к которой имеет доступ идентификатор, и это единственный раз, когда я вижу исключение UnauthorizedAccessException.

var subscriptions = manager.GetSubscriptions("myTopic");

Результаты в TimeoutException, с внутренним исключением типа SecurityTokenException. Я ожидал бы UnauthorizedAccessException здесь.

var client = SubscriptionClient.CreateFromConnectionString("Endpoint=sb://namespace.servicebus.windows.net/;SharedSecretIssuer=testidentity;SharedSecretValue=SSdtIE5vdCBUZWxsaW5n=", "myTopic", "otherSubscription");
var message = client.Receive()

Результаты в сообщении null, но снова я ожидаю UnauthorizedAccessException. Изучая вывод, я вижу исключения, происходящие в окне вывода, но проглатываемые клиентом:

A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.Net.WebException' occurred in System.dll
A first chance exception of type 'Microsoft.ServiceBus.TokenProviderHelper.InternalSecurityTokenException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.TimeoutException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.TimeoutException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.TimeoutException' occurred in Microsoft.ServiceBus.dll
A first chance exception of type 'System.TimeoutException' occurred in Microsoft.ServiceBus.dll

Аналогично, попытка создания тем, отправки сообщений и т.д. также приводит к TimeoutException.

Это правильное поведение при попытке получить доступ к областям, к которым идентификатор службы не имеет никакого доступа, а не к ожиданию получения UnauthorizedAccessException?

Я думаю, что у установки есть желаемый результат: идентификаторы не могут прослушивать подписки, отличные от той, которая указана в области подписки, против которой идентификатор имеет правило Listen, но я обеспокоен тем, что обратная связь с ошибкой не ясно, и приведет к непрерывным повторениям.

Любые советы будут оценены наиболее высоко.

4b9b3361

Ответ 1

Новые пространства имен SB, созданные после 8/22 через портал Azure, больше не будут создавать пространства имен ACS-компаньона. Поэтому вполне возможно, что тайм-аут, который вы получаете, - это правильное поведение.

Чтобы сгенерировать пространство имен ACS, попробуйте создать пространство имен SB с помощью командлета PowerShell нового-azuresbnamespace.

Ответ 2

Некоторые из этих токенов имеют ограниченный срок службы/срок действия. Поэтому, если вы используете токен, который прошел его истечение, что может привести к ошибке авторизации, как вы переживаете.