Ich habe ein Problem mit der Identität und ich bin nicht sehr vertraut damit. Vor nicht allzu langer Zeit habe ich ein neues Projekt gestartet, das ursprünglich keine Authentifizierung enthalten sollte. Als das Projekt jedoch wuchs, fanden wir heraus, dass wir es umsetzen sollten. Da es ursprünglich nicht so eingerichtet war, habe ich ein Formular für eine Anmeldung erstellt.ASP.NET Identity Integration, wenn das Projekt ohne Authentifizierung erstellt wird
fand ich die Antwort auf diese Frage und implementiert es:
How to implement custom authentication in ASP.NET MVC 5
aber es funktioniert nicht, und ich weiß nicht, warum.
Hier ist mein Code:
Es gibt nicht viel, hier zu sehen, es ist nur eine einfache Form.
@{
ViewBag.Title = "Login";
}
<div class="container">
<h2>Login</h2>
<br />
@using (Html.BeginForm("Login", "Main"))
{
<div class="row">
<div class="form-group col-xs-6">
@Html.Label("Username", htmlAttributes: new { @class = "control-label col-sm-3" })
<div class="col-sm-8">
@Html.TextBox("username", null, new { @class = "form-control" })
@*Html.ValidationMessageFor(model => model.EnrollmentOption, "", new { @class = "text-danger" })*@
</div>
</div>
<div class="form-group col-xs-6">
</div>
</div>
<div class="row">
<div class="form-group col-xs-6">
@Html.Label("Password", htmlAttributes: new { @class = "control-label col-sm-3" })
<div class="col-sm-8">
@Html.Password("password", null, new { @class = "form-control" })
@*Html.ValidationMessageFor(model => model.EffectiveDate, "", new { @class = "text-danger" })*@
</div>
</div>
<div class="form-group col-xs-6">
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-offset-6 col-sm-5">
<input type="submit" id="login" value="Sign in" class="btn btn-primary" />
</div>
</div>
</div>
}
Die Aktion für sie implementiert ist dieses, das zählt viel mehr:
[HttpPost]
public ActionResult Login(string username, string password)
{
if (isLoginValid(username, password))
{
var ident = new ClaimsIdentity(
new[] {
// adding following 2 claim just for supporting default antiforgery provider
new Claim(ClaimTypes.NameIdentifier, username),
new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string"),
new Claim(ClaimTypes.Name,username),
// No roles needed for now...
},
DefaultAuthenticationTypes.ApplicationCookie);
HttpContext.GetOwinContext().Authentication.SignIn(
new AuthenticationProperties { IsPersistent = false }, ident);
return RedirectToAction("QuoteSearch"); // auth succeed
}
else
{
// invalid username or password
ModelState.AddModelError("", "Invalid username or password");
return View();
}
}
Und es gibt die isLoginValid Funktion (Für jetzt ist es setzen eine hartkodierte Anmeldung verwenden)
[NonAction]
private bool isLoginValid(string user, string password)
{
return (user.ToLower() == "someUser" && password.ToLower() == "myPassword");
}
Ich weiß nicht sehr viel von Ansprüchen oder wie Identität darunter funktioniert. Ich habe jedoch alle notwendigen Referenzen hinzugefügt. Wenn ich nach den Login-Weiterleitungen das authorize-Attribut für meine Aktionen verwende, erhalte ich eine nicht autorisierte Anfrage von IIS. Stimmt etwas mit meinem Code nicht?
Was muss ich ändern oder beheben, um den Authorization-Teil von Identity verwenden zu können?
Danke,
installieren Wenn es Abneigungen wäre es gut zu wissen, warum, bitte mindestens einen Kommentar hinterlassen. –
Überprüfen Sie Ihre Startup.cs-Datei, Sie sollten einen Aufruf von services.AddIdentity (...) in der ConfigureServices-Methode haben, und ähnlich sollte in der Configure-Methode ein Aufruf von app.UseIdentity (...) erfolgen. Mein Vorschlag ist, die Beispiel-App mit Authentifizierung zu generieren und mit dem, was Sie haben, zu vergleichen. Aber es scheint wahrscheinlich, dass Sie die Dienste nicht injiziert haben. – guysherman
@guysherman Das ist für ASP.Net Core, nicht für MVC5, worum es sich bei dieser Frage handelt. – DavidG