具有现有身份和API的Razor页面具有自己的身份验证

时间:2019-10-29 17:46:23

标签: authentication asp.net-core jwt

我正在工作一个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

1 个答案:

答案 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
});  

请参阅https://docs.microsoft.com/en-us/aspnet/core/security/authorization/limitingidentitybyscheme?view=aspnetcore-3.0&tabs=aspnetcore2x