Nous essayons d'implémenter une authentification via les cookies dans notre application Blazor-WebAssembly.
Contrôleur : Définir l'Auth-Cookie :
[Route("[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
[HttpPost]
public async Task<AdUser> Login(Credentials pCredentials)
{
// [...] credential check jere
var lClaims = new List<Claim> {
new Claim(ClaimTypes.Name, "SamAccountName"),
};
var lClaimsIdentity = new ClaimsIdentity(lClaims, CookieAuthenticationDefaults.AuthenticationScheme);
// set cookie
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(lClaimsIdentity),
new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddYears(1),
RedirectUri = this.Request.Host.Value
});
// [...]
}
}
Lorsque je regarde dans les outils de développement du navigateur Edge, je peux voir que le cookie est installé :
Maintenant, ce qui suit Controller
a une action de recherche et doit avoir un accès restreint en ajoutant l'attribut [Authorize] :
[Route("[controller]")]
[ApiController]
public class ClientsController : ControllerBase
{
[HttpGet("search")]
[Authorize]
public ActionResult<List<Shared.Client>> Search(string pText)
{
// [...] Code here
return lResult;
}
}
Quand je fais une requête HTTP /Clients?search=My Search Text
au ClientsController, l'outil de développement de l'Edge me montre qu'une demande a été faite au /Account/Login
. Je ne comprends pas bien, car le code de réponse est 200 mais aucun contrôleur de compte n'existe dans mon projet.
Pourquoi mon cookie d'authentification ne fonctionne-t-il pas avec le système d'authentification de l'UE ? [Authorize]
attribut ?
Quelques détails supplémentaires sur mes configurations :
Startup.cs (côté serveur)
namespace BlazorWebAssemblyApp.Server
{
public class Startup
{
/// [...]
public void ConfigureServices(IServiceCollection services)
{
// [...]
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(); // This line is required for the authentication cookie
// [...]
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// [...]
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
}
}