Ho un problema con Identity e non ho molta familiarità con esso. Non molto tempo fa ho avviato un nuovo progetto che inizialmente non era destinato ad avere alcuna autenticazione collegata ad esso. Tuttavia, con la crescita del progetto, abbiamo scoperto che dovremmo implementarlo. Dal momento che non è stato originariamente impostato in questo modo, ho creato un modulo per l'accesso.Identità identità ASP.NET quando il progetto viene creato senza autenticazione
ho trovato la risposta a questa domanda e attuato:
How to implement custom authentication in ASP.NET MVC 5
Tuttavia non funziona e non so perché.
Ecco il mio codice:
Non c'è molto da vedere qui è solo una forma semplice.
@{
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>
}
L'intervento eseguito perché è questo, questo conta molto di più:
[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();
}
}
E c'è la funzione isLoginValid (per ora è impostato per utilizzare un account di accesso hardcoded)
[NonAction]
private bool isLoginValid(string user, string password)
{
return (user.ToLower() == "someUser" && password.ToLower() == "myPassword");
}
Non so molto delle affermazioni o di come l'identità lavori al di sotto. Mi sono assicurato di aggiungere comunque tutti i riferimenti necessari. Quando si utilizza l'attributo authorize sulle mie azioni dopo il reindirizzamento del login, ottengo una richiesta non autorizzata da IIS. C'è qualcosa che non va nel mio codice?
Cosa devo modificare o correggere per poter utilizzare la parte di autorizzazione di Identity?
Grazie,
Se ci sono antipatie sarebbe bene sapere perché, si prega di almeno lasciare un commento. –
Controlla il tuo file Startup.cs, dovresti avere una chiamata a services.AddIdentity (...) nel metodo ConfigureServices, e allo stesso modo nel metodo Configure dovrebbe esserci una chiamata a app.UseIdentity (...). Il mio suggerimento è di generare l'app di esempio con l'autenticazione e confrontarla con ciò che si ha. Ma sembra probabile che tu non abbia i servizi iniettati. – guysherman
@guysherman Questo è per ASP.Net Core, non per MVC5, di cui tratta la domanda. – DavidG