Die Autorisierung wurde verweigert für diese Anforderung. Immer
Hab ich schon erstellt eine MVC-webApi-Projekt und jetzt will ich mit Authentifizierung und Autorisierung.
Ich denke, dass ich bereits umgesetzt, dieser Sicherheit aber aus irgendeinem Grund etwas schlecht geht, wenn ich Schreibe, meine Anmeldeinformationen und ich versuche zu nennen, einige webApi Methoden die Meldung "die Autorisierung wurde verweigert für diese Anforderung" angezeigt.
Dies ist der code, den ich umgesetzt habe.
WebApiConfig:
public static void Register(HttpConfiguration config)
{
//Web API configuration and services
//Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Filters.Add(new AuthorizeAttribute());
}
Routing-Config:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Routing", action = "LogIn", id = UrlParameter.Optional }
);
}
Controller:
public class RoutingController : Controller
{
//
//GET: /Routing/
public ActionResult Index()
{
return View();
}
public ActionResult Projects()
{
return View();
}
public ActionResult Users()
{
return View();
}
public ActionResult LogIn()
{
return View();
}
[HttpPost]
public JsonResult LogInPost(string userName, string password)
{
User user = new User();
RoleByUser rByU = new RoleByUser();
password = UserController.EncriptPassword(password);
string url = string.Empty;
var checkUser = user.Get(userName);
var userExists = (from userInList in checkUser where userInList.UserName == userName && userInList.Password == password select userInList).FirstOrDefault();
if(userExists!= null)
{
var roles = (from roleByUser in userExists.listOfRole select roleByUser.RoleName.Trim()).ToArray();
IPrincipal principal = new GenericPrincipal(
new GenericIdentity(userExists.UserName), roles);
SetPrincipal(principal);
url = "Routing/Users";
}
return Json(url);
}
private void SetPrincipal(IPrincipal principal)
{
Thread.CurrentPrincipal = principal;
if (System.Web.HttpContext.Current != null)
{
System.Web.HttpContext.Current.User = principal;
}
}
}
HTML:
<link href="~/css/Style.css" rel="stylesheet" type="text/css" />
<div class="container">
<div class="card card-container">
<img id="STK" class="profile-img-card" src="Images/Softtek.png" />
<p id="profile-name" class="profile-name-card"></p>
<form class="form-signin">
<span id="reauth-email" class="reauth-email"></span>
<input type="text" id="txtUserName" class="form-control" placeholder="Email address" required autofocus />
<input type="password" id="txtPassword" class="form-control" placeholder="Password" required />
<div id="remember" class="checkbox">
<label>
<input type="checkbox" value="remember-me" /> Remember me
</label>
</div>
@*<button id="btnLogIn" class="btn btn-lg btn-primary btn-block btn-signin" >Sing In</button>*@
</form><!-- /form -->
<button id="btnLogIn" class="btn btn-lg btn-primary">Sing In</button>
<a href="#" class="forgot-password">
Forgot the password?
</a>
</div><!-- /card-container -->
</div><!-- /container -->
JS:
$(document).bereit(Funktion () {
$('#btnLogIn').klicken Sie auf(logIn); });
function logIn() {
$.ajax({
type: "POST",
url: "http://localhost:21294/Routing/LogInPost",
dataType: "json",
data: { userName: $('#txtUserName').val(), password: $('#txtPassword').val() },
success: function (data) {
if(data!= "" && data!= undefined && data!= null)
window.location.href = data;
},
error: function (err, e, error) {
toastr.error('Error')
}
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie die
[AllowAnonymous]
- Attribut, um den ControllerLogInPost
Wenn Sie die zusätzlichen
AuthorizeAttribute
zu Ihren Filter, es verursacht Ihre Controller übernehmen Sie erforderliche Berechtigung standardmäßig für alle Aktionen, einschließlich der Anmeldung.Machst du die Windows-Authentifizierung? sind Sie immer "Zugriff Verweigert" - Fehler?
Manchmal IISEXpress und IIS einige überlisten und zu überwinden, habe ich die site gehostet in lokalen iis (inetmgr), aktivieren Sie die Authentifizierung (windows, falls zutreffend) und jetzt führen Sie es.
P. S. nicht alle Maschinen haben ein IIS-server standardmäßig installiert, so dass, wenn Sie inetmgr nicht funktioniert, dann haben Sie die Installation über die Systemsteuerung --> Windows-Features - > wählen Sie alle Funktionen von IIS und ASP .NET
Hoffe, das wird helfen.
Sorry für so eine späte Antwort - ich fand deine Frage denn mit Umstellung von IIS-gehosteten web-api, um eine self-hosted-web-api, ich habe gerade angefangen mit dem gleichen problem.
In meinem Fall, das problem dadurch verursacht wurde, wie ich war Initialisierung Thread.CurrentPrincipal. Etwas hintergrund:
Vorher war ich die Zuweisung dieses "ClaimsPrincipal" - Instanz an Thread.CurrentPrincipal bevor diese Nachricht weiter, um die verbleibenden message Handler in der pipeline. Aber die Lösung war für mich, stattdessen verwenden die Principal member auf der HttpRequestContext Instanz, gehört zu den HttpRequestMessage-Instanz, übergeben wird, SendAsync. Also (F#),
Hoffe, das ist in der Lage zu helfen, Sie in irgendeiner Weise.