Я использую службу контроля доступа для авторизации доступа к определенным подпискам на служебную шину для определенных идентификаторов службы.
При получении сеансов или сообщений из подписки идентификатор службы авторизируется и может получать и завершать или оставлять сообщения по мере необходимости.
Тем не менее, я не вижу 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.
У меня есть следующая настройка:
- Идентификатор службы: testidentity
- Группы правил:
- Группа правил по умолчанию для служебной шины
- 3 правила, Input Claim: owner, Output Claims: Manage, Send, Listen
- Группа правил для http://namespace.servicebus.windows.net/myTopic
- Нет правил
- Группа правил для http://namespace.servicebus.windows.net/myTopic/Subscriptions
- Нет правил
- Группа правил для http://namespace.servicebus.windows.net/myTopic/Subscriptions/mySubscription
- Одно правило: входная претензия: testidentity, Output Claim: Listen
- Группа правил по умолчанию для служебной шины
- Заявка на подачу заявки:
- Царство: http://namespace.servicebus.windows.net/myTopic/Subscriptions/mySubscription
- Формат токена: SWT
- Срок действия токена: 10800
- Поставщики удостоверений: нет (ACS)
- Связанный со всеми перечисленными выше группами правил
Я вижу следующие проблемы:
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, но я обеспокоен тем, что обратная связь с ошибкой не ясно, и приведет к непрерывным повторениям.
Любые советы будут оценены наиболее высоко.