我如何让这个基本身份验证在 .NET Core 中工作
How do i get this Basic Authentication working in .NET Core
我正在使用 Basic Authentication
并为此创建了一个 Middleware
。当我使用 Authorize
属性并尝试通过 Postman 进行 API 调用时,我得到 401 Unauthorize
即使我在 Postman 中添加了授权详细信息。
我不确定这是否是我通过邮递员调用控制器操作的方式,或者我是否在邮递员中缺少 header 选项。
配置服务
services
.AddAuthentication(BasicAuthenticationDefaults.AuthenticationScheme)
.AddBasicAuthentication(GetBasicAuthenticationOptions(users));
配置
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
app.UseCors("SiteCorsPolicy");
app.UseAuthentication();
}
基本身份验证实施
private Action<BasicAuthenticationOptions> GetBasicAuthenticationOptions(IList<UserConfiguration> users)
{
return options =>
{
options.Realm = "Public API";
options.Events = new BasicAuthenticationEvents
{
OnValidatePrincipal = context =>
{
var authenticatedUser = users.FirstOrDefault(u =>
u.Username == context.UserName && u.Password == context.Password);
if (authenticatedUser != null)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name,
context.UserName,
context.Options.ClaimsIssuer)
};
var principal = new ClaimsPrincipal(new ClaimsIdentity(claims,
BasicAuthenticationDefaults.AuthenticationScheme));
context.Principal = principal;
return Task.CompletedTask;
}
return Task.FromResult(AuthenticateResult.Fail("Authentication failed."));
}
};
};
}
带授权的控制器操作
[Authorize]
[HttpPost]
[Route("test")]
public IActionResult Test()
{
return Json("yes");
}
邮递员请求
用户名和密码在appsettings.json文件中
这个问题只是因为 app.UseMvc();
放在了 app.UseAuthentication();
之前。我只需要在 app.UseAuthentication();
之后放置 app.UseMvc();
并修复它。
我正在使用 Basic Authentication
并为此创建了一个 Middleware
。当我使用 Authorize
属性并尝试通过 Postman 进行 API 调用时,我得到 401 Unauthorize
即使我在 Postman 中添加了授权详细信息。
我不确定这是否是我通过邮递员调用控制器操作的方式,或者我是否在邮递员中缺少 header 选项。
配置服务
services
.AddAuthentication(BasicAuthenticationDefaults.AuthenticationScheme)
.AddBasicAuthentication(GetBasicAuthenticationOptions(users));
配置
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
app.UseCors("SiteCorsPolicy");
app.UseAuthentication();
}
基本身份验证实施
private Action<BasicAuthenticationOptions> GetBasicAuthenticationOptions(IList<UserConfiguration> users)
{
return options =>
{
options.Realm = "Public API";
options.Events = new BasicAuthenticationEvents
{
OnValidatePrincipal = context =>
{
var authenticatedUser = users.FirstOrDefault(u =>
u.Username == context.UserName && u.Password == context.Password);
if (authenticatedUser != null)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name,
context.UserName,
context.Options.ClaimsIssuer)
};
var principal = new ClaimsPrincipal(new ClaimsIdentity(claims,
BasicAuthenticationDefaults.AuthenticationScheme));
context.Principal = principal;
return Task.CompletedTask;
}
return Task.FromResult(AuthenticateResult.Fail("Authentication failed."));
}
};
};
}
带授权的控制器操作
[Authorize]
[HttpPost]
[Route("test")]
public IActionResult Test()
{
return Json("yes");
}
邮递员请求
用户名和密码在appsettings.json文件中
这个问题只是因为 app.UseMvc();
放在了 app.UseAuthentication();
之前。我只需要在 app.UseAuthentication();
之后放置 app.UseMvc();
并修复它。