0

サイトでの 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 を持っています。カスタム ユーザーには管理者権限がありません。

ここに画像の説明を入力

4

0 に答える 0