アイデンティティのユーザーを管理するAccountAdminコントローラがあります。UnauthorziedリクエストがASP.Net MVCコアのAccessDenied URLにリダイレクトされないのはなぜですか?
だから私は、承認は、コントローラの先頭に次のように属性があります。
[Authorize(Roles = "Admin")]
public class AccountAdminController : Controller
システム全体が素晴らしい働いています。管理者の役割を持つユーザーとしてログインすると、そのページにアクセスできます。管理者の役割なしでユーザーとしてログインすると、ページにアクセスできなくなります。しかし、私の問題は、「Account/AccessDenied」ページにリダイレクトされるのではなく、「AccountAdmin/Index」URLを取得するだけで、コンテンツが拒否され、「Status Code:403; Forbidden」というメッセージが表示されますから:
app.UseStatusCodePages();
私のスタートアップ。私が持っているStartUp.ConfigureServicesで
:
私が持っているStartupConfigureで services.AddIdentity<AppUser, IdentityRole>(options =>
{
options.Password.RequiredLength = 4;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireLowercase = false;
options.Password.RequireUppercase = false;
options.Password.RequireDigit = false;
options.User.AllowedUserNameCharacters = null;
}).AddEntityFrameworkStores<ApplicationDbContext>();
:
app.UseIdentity();
私はここに多くのコードを投稿していない知っているが、それはすべてのかなりまっすぐ進むものです。 CaveaotはWindows認証を使用しています。 UpperRightコーナーにDomainName \ UserNameのようなユーザーログインを表示します。 は、そして私は、など私たちはTestRole1、TestRole2でサインインすることができますでの偽装ログインの種類を、作っ
AccountControllerはこのようになります:それはすべての認証限りかなりうまく働いて
public class AccountController : Controller
{
private SignInManager<AppUser> _signInManager;
private UserManager<AppUser> _userManager;
public AccountController(SignInManager<AppUser> signInManager,
UserManager<AppUser> userManager)
{
_signInManager = signInManager;
_userManager = userManager;
}
public IActionResult Login()
{
return View(_userManager.Users.OrderBy(u => u.UserName));
}
[HttpPost]
public async Task<IActionResult> Login(string userName, bool persistant)
{
await _signInManager.SignInAsync(await _userManager.FindByNameAsync(userName), persistant);
return RedirectToAction("Index", "Home");
}
public async Task<IActionResult> LogOff()
{
await _signInManager.SignOutAsync();
return RedirectToAction("Login", "Account");
}
承認が行われます。 私がサインインをクリックするまで、私の実際のWindowsアカウントは私が自分自身に割り当てた役割と一致しません。 SignInManagerを経由しなければなりません:
[HttpPost]
public async Task<IActionResult> Login(string userName, bool persistant)
{
await _signInManager.SignInAsync(await _userManager.FindByNameAsync(userName), persistant);
return RedirectToAction("Index", "Home");
}
このAccessDeniedリダイレクトはどのように動作させることができますか?
アップデート1:私はこのようなフィルタ作ってみました
:
[MyAuthorizationFilter(Roles = "Admin")]
:
public class MyAuthorizationFilter : Attribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
if (context.HttpContext.Response.StatusCode == 403)
{
context.HttpContext.Response.Redirect("/Access/Denied");
}
}
}
しかし、今の私は、標準の承認はこれで属性置き換えるしようとすると、
「ロール」が何であるかはわかりません。 "タイプまたは名前空間のロールが見つかりませんでした。アセンブリまたは名前空間がありませんか?"
私は 'options.Cookies.ApplicationCookie.AccessDeniedPath ="/Account/AccessDenied ";'それがWindows Authで動作することを知りたいのです。私はそれを疑うが、...肩をすくめる。 –
それを撃つ。うまくいきませんでした。 – Sam