我正在开发一个 ASP.NET Core 3.0 razor Pages 项目,我在其中添加了一个 api 文件夹,并且一切正常。
但我想要对 api 函数进行身份验证。
我已经在我的 Razor 页面网站中使用身份验证/身份验证,并且我已经阅读了有关 JWT 的内容,我“认为”这可能是可行的方法,但是是否可以将现有的身份/身份验证与用于仅以某种方式提供API?
所以我的 api 目前使用的是标准的开箱即用的 Visual Studio API:-
[Route("api/[controller]")]
[ApiController]
public class PortfoliosController : ControllerBase
{
private readonly actools19bContext _context;
public PortfoliosController(actools19bContext context)
{
_context = context;
}
等等...
我已经阅读过有关使用 JWT 在 [Route("api/[controller]")] 上方添加 [Authorize] 的内容,但担心这会阻止标准 razor 页面网站的工作。
我尝试在 Google 上查找不同的地方,但找不到任何人完成了我需要做的事情(这也许表明不应将 API 与 razor 网站混合使用?)
我的标准 Razor 页面身份验证是使用
添加的 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 视为独立于 Razor 网站的独立事物吗?
C
最佳答案
您可以在 Controller 上设置特定方案以使用特定身份验证,对于仅使用 JWT 身份验证的 Web api,您可以尝试
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("api/[controller]")]
public class MyApiController : Controller
启动时JWT的配置如下(引用here)
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
//your options
});
关于authentication - 具有现有的 Razor 页面和具有自己的身份验证的 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58612878/