サイトでの Windows 認証と、ビルトイン管理者のクレームの管理方法に混乱しています。管理者権限を持っているが、IsInRole(BuiltInAdmin)
テストに失敗したユーザー。
- deny クレームが割り当てられたのはなぜですか?
- 提供されたクレームに頼るのではなく、ユーザーを直接確認する必要がありますか?
- これは、サイトで Windows 認証を使用した非昇格 ID クレームの結果ですか?
特定のケースに対してIS管理チェックを追加するまで、プロセスはすべて期待どおりに機能していました。期待どおりにトリガーされるカスタム AUTH 属性を使用 しました 期待どおりに動作し、AuthorizeAttribute を文書化しており、 true または false を返すことができます。それはすべて良いことです。
しかし、ADMIN ロールのチェックは失敗します。
コード:
[AttributeUsage(AttributeTargets.Class)] // all controllers inherit this attribuet
public class CUSTOMAuth:AuthorizeAttribute {
protected override bool AuthorizeCore(HttpContextBase httpContext) {
if (! base.AuthorizeCore(httpContext)) {
return false;
}
// is the identity on teh request an admin ?
return (IsLocalAdmin(httpContext.Request.LogonUserIdentity));
}
}
public static bool IsLocalAdmin(WindowsIdentity identity) {
var localAdmins = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
if (identity != null) {
var prin = new WindowsPrincipal(identity);
return (prin.IsInRole(localAdmins)); //<<< returns false
}
return false;
}
デバッガーで、httpContext.Request.LogonUserIdentity が CLAIMS/denyonlysid で配信されたことがわかります。
つまり、リクエストは、組み込みの管理者クレームを除いて言っていることを意味します。ユーザーには管理者権限がありますが。
追加情報: APP プールは統合モードを使用します。Windows 認証、および特別なユーザー ID を持っています。カスタム ユーザーには管理者権限がありません。