问题描述
我在ASP.NET Core中具有API应用程序,该应用程序具有两个控制器并成功设置了多个承载身份验证和Swagger。身份验证正常工作。我用邮递员检查过。
- ControllerOne使用authSchemeOne
- ControllerTwo使用authSchemTwo
我想要实现的是,在Swagger中,我希望同时登录到两个模式,并配置Swagger,以便ControllerOne使用authSchemeOne并相互使用。
现在我必须首先登录。不能同时使用两者(如果我登录到两者,则swagger使用最后一个)。希望我解释得很好。
是否可以在Swagger中进行配置? 身份验证正常工作。
非常感谢您!
更新: Swagger json
第一个控制器
/// <summary>
/// FirstController
/// </summary>
[Route("api/[controller]")]
[ApiController]
[Authorize(AuthenticationSchemes = "Bearer")]
public class FirstController : ControllerBase
{
/// <summary>
/// Get
/// </summary>
/// <returns></returns>
[HttpGet]
[ProducesResponseType(StatusCodes.Status200OK)]
public IActionResult Get()
{
return Ok("FirstController");
}
}
第二个控制器
/// <summary>
/// SecondController
/// </summary>
[Route("api/[controller]")]
[ApiController]
[Authorize(AuthenticationSchemes = "Bearer2")]
public class SecondController : ControllerBase
{
/// <summary>
/// Get
/// </summary>
/// <returns></returns>
[HttpGet]
[ProducesResponseType(StatusCodes.Status200OK)]
public IActionResult Get()
{
return Ok("SecondController");
}
}
启动
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1",new OpenApiInfo { Title = "Api",Version = "v1" });
// Set the comments path for the Swagger JSON and UI.
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory,xmlFile);
c.IncludeXmlComments(xmlPath);
var bearerSecurityScheme = new OpenApiSecurityScheme
{
Name = "Authorization",Type = SecuritySchemeType.ApiKey,Scheme = "Bearer",BearerFormat = "JWT",In = ParameterLocation.Header,Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,Id = "Bearer"
}
};
var patientsLikeMeSecurityScheme = new OpenApiSecurityScheme
{
Name = "Authorization",Id = "Bearer2"
}
};
c.AddSecurityDeFinition("Bearer",bearerSecurityScheme);
c.AddSecurityDeFinition("Bearer2",patientsLikeMeSecurityScheme);
c.AddSecurityRequirement(new OpenApiSecurityRequirement {
{ bearerSecurityScheme,Array.Empty<string>() },{ patientsLikeMeSecurityScheme,Array.Empty<string>() }
});
});
services.AddControllers();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Audience = "Audience1";
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateAudience = true,ValidateIssuer = false,ValidateIssuerSigningKey = false,ValidatetokenReplay = false,ValidateActor = false,ValidateLifetime = false,IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(""))
};
})
.AddJwtBearer("Bearer2",options =>
{
options.Audience = "Audience2";
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateAudience = true,IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(""))
};
});
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)