我正在工作一个asp.net core 3.0剃刀页面项目,并且我已经在其中添加了一个api文件夹,并且一切正常。
但是我想要对api函数进行身份验证。
我已经在我的剃须刀页面网站上使用身份验证/身份,并且我已经阅读了有关JWT的信息,我“认为”这可能是一种解决方法,但是有可能将现有的身份验证/身份验证与用于API仅以某种方式?
所以我的api目前使用了现成的标准Visual Studio API:-
[Route("api/[controller]")]
[ApiController]
public class PortfoliosController : ControllerBase
{
private readonly actools19bContext _context;
public PortfoliosController(actools19bContext context)
{
_context = context;
}
等...
我已经读过有关在JRoute上方使用[Route(“ api / [controller]”)]添加[Authorize]的信息,但我担心它会阻止标准剃刀页面网站的工作。
我曾尝试过在各个地方使用Google,但是找不到任何可以完成我需要做的事情的人(这也许表明不应该将API与剃须刀网站混合使用?)
使用
添加了我的标准剃须刀页面身份验证 services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy =>
policy.RequireRole("Admin", "Administrator"));
});
services.AddAuthorization(options =>
{
options.AddPolicy("UserOnly", policy =>
policy.RequireRole("User"));
});
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.Cookie.Expiration = TimeSpan.FromHours(5);
});
等
有人以前做过这种事情吗?或者我真的应该把这个API视为与剃刀网站分开的事情吗?
C
答案 0 :(得分:0)
您可以在控制器上设置特定的方案以使用特定的auth,对于仅使用JWT身份验证的Web api,您可以尝试
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
public class MyApiController : Controller
JWT的启动过程如下所示(请参考here)
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
//your options
});