我们有两个理论上 相同的网络服务器,但在执行AzMan授权检查时会产生不同的结果。
我们在两台机器上运行相同的网站(字面上是相同的网站 - 它是从一个到另一个的XCOPYed,它在同一个服务帐户下运行)。所有这些网站都会对AzMan数据库(位于单独的SQL服务器上)执行授权检查。
但是,在工作网站(WebA)上,此检查会返回0
(即“用户已获得授权”),而在损坏的网站(WebB)上,此检查将返回5
(即“用户未被授权”)。我们期望在这两个网站上0
。同一个用户从同一台PC访问这两个网站。
有没有人对我们可以检查的事情有任何想法?
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。
答案 0 :(得分:2)
感谢David Hall指出我正确的方向。
调查显示,这两个网站都启用了Windows身份验证和匿名访问。但是,在一个网站上,用户正在正确登录,而在破碎的网站上,它又回到了匿名模式。
禁用匿名访问通过确保用户登录到两个网站来解决此问题。
然而,这又留下了另一个问题:为什么浏览器在一个网站上匿名登录而不是另一个网站 - 我认为是ServerFault的一个。
答案 1 :(得分:0)
在我们的例子中,我们使用ASP.NET模拟而不是匿名。 Tt正在开发Windows 7 Enterprise x64开发机器而不是Windows Server 2008 R2 x64测试服务器。两个应用程序池都使用相同的域帐户凭据设置完全相同。
事实证明,ASP.NET假冒是该问题的根本原因。禁用ASP.NET模拟后,App Pool帐户现在用作成功连接到AzMan存储的凭据。连接到Active Directory或SQL Server中的AzMan存储时发生了同样的问题。
为清楚起见,我得到的错误是:Value does not fall within the expected range. from AzAuthorizationStoreClass.Initialize()
我的最终连接字符串是:
<add name="AzPolicyStore" connectionString="mssql://Driver={SQL
Server};Server=sqlserver\instance;/DatabaseName/AzStore" />