我创建了一个使用 Microsoft AzMan 的 Web 应用程序,它可以正常工作,直到您拥有多个用户。我几乎 100% 确定 AzMan 正在为多个用户缓存相同的内容。
为了简化一点,我看到的问题是用户 A 访问该站点并具有完全访问权限,该用户被授予正确的访问权限并且可以正常工作。然后用户 B 访问该站点,只有查看权限,但因为 AzMan 已经看到用户 A 的完全访问权限,所以它也授予用户 B 完全访问权限。
我在创建客户端上下文时使用了 AddStringSids 方法,因为它是唯一适用于各种情况的方法。这有问题吗?当我们从令牌创建客户端上下文时,我们曾经没有这个问题。
以下是我用来创建上下文的确切代码。app 是 IAzApplication2 变量,ClientContext.SID 是相关用户的 SecurityIdentifier。
IAzClientContext2 cctx = app.InitializeClientContext2("AppNameHere", null);
cctx.AddStringSids(new object[] { (object)ClientContext.SID.ToString() } as object);
编辑:我根本没有使用 ASP.Net 角色提供程序,因为这需要应用程序了解角色。我只使用 COM API。
编辑2:另外,如果用户B首先登录,那么用户A在登录时就没有访问权限。所以它不仅仅是保持最高级别的访问权限。