我想让我的控制器同时使用令牌和BasicAth。类似的用户可以选择使用两种身份验证中的一种
目前我无法同时使用这两种方法,它要么使用Jwt,要么使用basicAuth,但不能同时使用
如果我把它们都像下面这样,那就没用了。知道我如何让它与一起工作吗
[JwtAuthentication]
[BasicAuthenticationFilter(false)]
您可以执行以下操作。
在程序中。cs
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = "Custom";
})
.AddPolicyScheme("Custom", "Custom", options =>
{
options.ForwardDefaultSelector = context =>
{
string authHeader = context.Request.Headers["Authorization"];
if (authHeader != null && authHeader.StartsWith("Basic "))
{
return BasicAuth;
}
else
{
return JwtBearerDefaults.AuthenticationScheme;
}
};
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
// your code for token validation parameters.
})
.AddScheme<AuthenticationSchemeOptions, BasicAuthenticationHandler>(BasicAuth, null);
在控制器中
[Authorize]
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get(){}
并且您必须在需要验证用户名和密码的地方实现BasicAuthenticationHandler。
希望能有所帮助。