我们有 2 个理论上相同的 Web 服务器,但在执行 AzMan 授权检查时会产生不同的结果。
我们在两台机器上运行相同的网站(实际上是相同的网站 - 它已从一台机器复制到另一台机器,并且在同一服务帐户下运行)。该网站所做的只是针对 AzMan 数据库(位于单独的 SQL 服务器上)执行授权检查。
但是,在工作网站 (WebA) 上,此检查返回0
(即“用户已授权”),而在损坏的网站 (WebB) 上,此检查返回5
(即“用户未授权”)。我们期待0
在这两个网站上。同一用户从同一台 PC 访问两个网站。
有人对我们可以检查的事情有任何想法吗?
环境细节
- 视窗服务器 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();
非常感谢,
RB。