asp.net-mvc - 我如何让这个基本身份验证在 .NET Core 中工作
问题描述
我正在使用并且为此Basic Authentication
创建了一个。Middleware
当我使用该Authorize
属性并尝试通过 Postman 进行 API 调用时,我401 Unauthorize
什至在 Postman 中添加了授权详细信息。
我不确定这是否是我通过邮递员调用控制器操作的方式,或者我是否缺少邮递员中的标题选项。
配置服务
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.UseMvc();
之后app.UseAuthentication();
就可以修复它。
推荐阅读
- swift - UISearchBar 通过数组查询不起作用:(
- javascript - Node 应用程序通过暂停当前执行以交互方式从反应前端获取用户输入
- cors - 如何使用 AWS API 网关和 Lambda 通过 CORS?
- mysql - MySql 登录错误 - 使用用户名自动添加的域名
- python - 将 python 列表增加一个量 mod x_i,其中 x_i 取决于位置
- ios - 新的 Spotify iOS SDK:Swift 中的持久身份验证
- fortran - C 到 Fortran 推送堆栈函数转换
- python - 使用 dateutil relativedelta 的 TypeError(“模块”对象不可调用)
- javascript - d3 中的多线图,包含几年的每月天气数据,基于时间的 x 轴问题
- numpy - numpy 将数组的形状相乘以形成更大的数组