authentication - 具有现有的 Razor 页面和具有自己的身份验证的 api

标签 authentication asp.net-core jwt

我正在开发一个 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
});  

引用https://learn.microsoft.com/en-us/aspnet/core/security/authorization/limitingidentitybyscheme?view=aspnetcore-3.0&tabs=aspnetcore2x

关于authentication - 具有现有的 Razor 页面和具有自己的身份验证的 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58612878/

相关文章:

authentication - 如何使用谷歌应用程序配置 Jenkins 登录

php - 登录php后重定向到首页

python - tornado.web.authenticated 后退按钮问题

asp.net-core - NET Core 的 Dapper : Insert into a table and return id of inserted row

c# - ASP 核心 HttpClient.Get 从容器到本地主机站点失败

logging - 为什么 asp.net core 日志记录不按开头的类别进行过滤?

firebase - 使用 Deno djwt 验证 Firebase ID token (JWT)

android - 实现用户帐户激活的最佳方法是什么?

ios - Sign in with Apple (iOS App + Backend verification) API 返回错误 "invalid_client"

javascript - jwt是否使用当前时间作为输入,以便每次询问时给出不同的 token