gpt4 book ai didi

c# - 使用 ASP.NET 核心 MVC/Razor 站点和 WebAPI 进行授权

转载 作者:行者123 更新时间:2023-12-03 23:49:04 25 4
gpt4 key购买 nike

我已经在我的应用程序的 API 部分实现了 JWT 身份验证/授权。我还有一个 ASP.NET 核心 MVC 网站,我想用它进行身份验证。是否可以使用来自 API 的 JWT token 对网站进行身份验证?我想阻止用户在未经授权的情况下进入特定位置,如果没有,则重定向到登录页面。我发现的所有示例都展示了如何使用 API (JWT) 或 MVC 网站 (cookies) 但不能同时使用这两者。

最佳答案

同时处理身份验证/授权对我来说没有意义。

为什么同时使用 MVC 应用程序和 Web API 进行身份验证没有意义

如果您希望 API 和 MVC Web 应用程序都处理身份验证和授权,则您的 MVC 应用程序和 API 都需要能够验证它收到的 token 并检查用户拥有的角色。这意味着您将需要复制您的身份验证 API 拥有的所有身份验证/授权逻辑,这会使您的 API 变得多余,因为当您的 MVC 应用程序将处理验证 token 时,使用 API 仅创建 token 没有多大意义。

推荐:

每当在您的 MVC Web 应用程序上调用 protected 资源时,将 token 从您的 MVC 应用程序传递到您的身份验证 API 以验证用户是否有权访问此资源。如果来自您的身份验证 API 的响应是 401 或 403,请适当处理它们(重定向到登录)。如果响应为 200 OK,则显示资源。

本质上,您需要为每个需要身份验证的请求将 JWT 传递给身份验证 API,并且您的 MVC Web 应用程序根据从身份验证 API 返回的状态代码使用react

可能的实现

自定义身份验证处理程序可能是处理此问题的好地方。您可以通过覆盖 HandleAuthenticateAsync 来做到这一点。 AuthenticationHandler 中的方法

然后在启动时注册您的自定义身份验证和授权类。这是它的外观的快速示例。

public class MyCustomAuthenticationHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
public PlatformAuthenticationHandler(
IOptionsMonitor<AuthenticationSchemeOptions> options,
ILoggerFactory logger,
UrlEncoder encoder,
ISystemClock clock)
: base(options, logger, encoder, clock)
{
}

protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
//Send your request to your API and return either
//AuthenticateResult.Fail
//return AuthenticateResult.Success
}
}

这是授权文档

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/iauthorizationpolicyprovider?view=aspnetcore-3.1

关于c# - 使用 ASP.NET 核心 MVC/Razor 站点和 WebAPI 进行授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60430758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com