L'autorisation a été refusée pour cette demande. Toujours
J'ai déjà créé un MVC webApi projet et maintenant je veux utiliser l'Authentification et l'Autorisation.
Je pense que j'ai déjà mis en place cette sécurité, mais pour une raison que quelque chose va mal, quand j'écris mes identifiants et j'essaie d'appeler certains webApi méthodes le message "Autorisation a été refusée pour cette demande" est affichée.
C'est le code que j'ai mis en place.
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());
}
La Configuration De Routage:
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 }
);
}
Contrôleur:
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).ready(function () {
$('#btnLogIn').cliquez sur(nom de connexion); });
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')
}
});
OriginalL'auteur user3442776 | 2015-10-07
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter le
[AllowAnonymous]
attribut à votre Contrôleur deLogInPost
Lorsque vous avez ajouté l'
AuthorizeAttribute
à vos critères, il a causé de vos contrôleurs de supposer qu'ils devaient obtenir une autorisation par défaut pour toutes les actions, y compris celui utilisé pour la connexion.C'est une réponse tardive, mais comment pouvez-vous attendre de l'action à autoriser pour un rôle si l'utilisateur n'a pas encore authentifier?
OriginalL'auteur Jonathon Chase
Faites-vous de l'Authentification Windows? obtenez-vous l'erreur "Accès Refusé"?
À la fois IISEXpress et IIS n'certains tromper et à surmonter des que j'ai hébergé le site dans iis local (inetmgr), activer l'Authentification (windows si applicable) et maintenant l'exécuter.
P. S. pas sur toutes les machines du serveur IIS est installé par défaut, donc si inetmgr ne fonctionne pas, alors vous devez l'installer à partir du Panneau de configuration --> Fonctionnalités de Windows --> sélectionnez toutes les fonctionnalités d'IIS et ASP .NET
Espère que cela aidera.
OriginalL'auteur dotNetAuthor
Désolé pour une réponse tardive, je l'ai trouvé votre question, parce que, étant passée de l'IIS web hébergée par api pour une auto-hébergé web api, j'ai juste commencé à ressentir le même problème.
Dans mon cas, le problème a été causé par la façon dont j'ai été l'initialisation du Fil.CurrentPrincipal. Un peu de contexte:
Auparavant, j'avais été l'attribution de ce ClaimsPrincipal instance de Thread.CurrentPrincipal avant de passer le message par la suite, le reste des gestionnaires de messages dans le pipeline. Cependant, la solution pour moi a été d'utiliser à la place le membre Principal sur le HttpRequestContext instance qui appartient à la HttpRequestMessage instance qui est passé de SendAsync. Donc (F#),
Espère que ce n'est en mesure de vous aider d'une certaine façon.
OriginalL'auteur 1MuddyDog