AzMan дает разные результаты для разных серверов - PullRequest
2 голосов
/ 05 мая 2011

У нас есть 2 веб-сервера, которые теоретически идентичны, но дают разные результаты при проверке авторизации AzMan.

У нас один и тот же веб-сайт работает на обеих машинах (буквально тот же веб-сайт - он XCOPYed от одного к другому, и он работает под той же учетной записью службы).Все, что делает этот веб-сайт, выполняет проверку авторизации для базы данных AzMan (на отдельном сервере SQL).

Однако на рабочем веб-сайте (WebA) эта проверка возвращает 0 (т.е.пользователь авторизован "), а на сломанном веб-сайте (WebB) эта проверка возвращает 5 (т.е." пользователь НЕ авторизован ").Мы ожидаем 0 на обоих сайтах.Один и тот же пользователь получает доступ к обоим веб-сайтам с одного компьютера.

У кого-нибудь есть идеи относительно того, что мы можем проверить?

Сведения об окружении

  • WindowsServer 2008 R2
  • Тот же домен AD
  • IIS 7.5
  • .NET 3.5
  • База данных AzMan работает на SQL Server 2005 / Windows Server 2008 R2.

Код

AzAuthorizationStoreClass authStore = new AzAuthorizationStoreClass();

// initialise the store
authStore.Initialize(0, "mssql://Driver={SQL Server};Server={OURDBSERVER};Trusted_Connection={Yes};/OURDATABASE/OURAPPLICATION", null);

// open the store
IAzApplication2 authApp = authStore.OpenApplication2("OURAPPLICATION", null);

// get the identity of the user NOT the service account
WindowsIdentity identity = Thread.CurrentPrincipal.Identity as WindowsIdentity;

// and from that derive the token
ulong userToken = (ulong)identity.Token.ToInt64();

// get the context based on the token
IAzClientContext3 clientContext = 
    (IAzClientContext3)authApp.InitializeClientContextFromToken(userToken, null);

// get the operation object based on the id
IAzOperation2 azManOperation = (IAzOperation2)authApp.OpenOperation(operationId, null);

// generate an audit identifier
string auditIdentifer = 
    string.Format("{0}{1} : O:{2}", "{the_correct_id}", identity.Name, operationId);

uint accessResult = clientContext.AccessCheck2(auditIdentifer, string.Empty, azManOperation.OperationID);

return accessResult.ToString();

Большое спасибо,

РБ.

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Спасибо Дэвиду Холлу за то, что он указал мне правильное направление.

Исследование показало, что оба веб-сайта были включены как для аутентификации Windows, так и для анонимного доступа. Однако на одном веб-сайте пользователь правильно входил в систему, а на сломанном веб-сайте он возвращался в анонимный режим.

Отключение анонимного доступа устранило эту проблему, обеспечив вход пользователя на оба веб-сайта.

Тем не менее, возникает еще один вопрос: почему браузер анонимно регистрируется на одном веб-сайте, а не на другом - я думаю, что для ServerFault.

0 голосов
/ 03 апреля 2013

В нашем случае мы использовали олицетворение ASP.NET с проверкой подлинности Windows, а не анонимно.Tt работал на компьютере для разработки Windows 7 Enterprise x64, а не на тестовом сервере Windows Server 2008 R2 x64.Оба пула приложений были настроены одинаково с одинаковыми учетными данными домена.

Оказывается, что олицетворение ASP.NET было основной причиной проблемы.После отключения олицетворения ASP.NET учетная запись пула приложений теперь использовалась в качестве учетных данных для успешного подключения к хранилищу AzMan.Та же проблема возникала при подключении к хранилищу AzMan в Active Directory или SQL Server.

Для ясности, я получал ошибку: Value does not fall within the expected range. from AzAuthorizationStoreClass.Initialize()

Моя последняя строка подключения была:

<add name="AzPolicyStore" connectionString="mssql://Driver={SQL
  Server};Server=sqlserver\instance;/DatabaseName/AzStore" />
...