如何设置asp.net-core-mvc中所有操作的全局授权策略?
- 内容介绍
- 文章标签
- 相关推荐
本文共计550个文字,预计阅读时间需要3分钟。
在MVC+Core框架中,要全局授权所有操作,你可以通过配置全局过滤器来实现。以下是一个简化的例子,说明如何注册一个全局过滤器:
csharpservices.AddMvc(options=>{ options.Filters.Add(new AuthorizeFilter());});
这里,`AuthorizeFilter` 是ASP.NET Core中用于授权的过滤器。通过添加这个过滤器,你可以为所有操作强制执行身份验证。
如果你已经知道如何注册全局过滤器,但遇到无法授权的问题,可能是因为授权配置不正确或中间件链中缺少必要的组件。以下是一些常见问题及解决方案:
1. 确保已配置身份验证服务: 在 `Startup.cs` 的 `ConfigureServices` 方法中,确保已经添加了身份验证服务,例如: csharp services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);
2. 配置授权策略: 如果使用角色授权,确保在 `Startup.cs` 中配置了角色策略: csharp services.AddAuthorization(options=> { options.AddPolicy(RequireAdminRole, policy=> policy.RequireRole(Admin)); });
3. 在控制器或操作方法上应用策略: 如果你的过滤器需要特定策略,确保在控制器或操作方法上应用了正确的策略: csharp [Authorize(Policy=RequireAdminRole)] public IActionResult SomeAction() { // ... }
4. 检查中间件链: 确保中间件链中包含了 `AuthenticationMiddleware` 和 `AuthorizationMiddleware`。
如果以上步骤都正确,但仍然无法授权,可能需要检查具体的错误信息或日志,以确定问题所在。
如何强制/设置MVC Core中所有操作的全局授权?我知道如何注册全局过滤器 – 例如我有:
Setup.cs services.AddMvc(options => { options.Filters.Add(new RequireHttpsAttribute()); });
这工作正常,但我无法为授权添加相同的内容:
options.Filters.Add(new AuthorizeAttribute());
我有错误:
无法从’Microsoft.AspNet.Authorization.AuthorizeAttribute()’转换为’System.Type’
(Method .Add()需要IFilterMetadata类型)
我知道 – 从类似的问题 – 这适用于MVC4-5 ……所以必须在MVC Core上改变…
有人有什么想法吗?
services.AddMvc(config => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); config.Filters.Add(new AuthorizeFilter(policy)); });
本文共计550个文字,预计阅读时间需要3分钟。
在MVC+Core框架中,要全局授权所有操作,你可以通过配置全局过滤器来实现。以下是一个简化的例子,说明如何注册一个全局过滤器:
csharpservices.AddMvc(options=>{ options.Filters.Add(new AuthorizeFilter());});
这里,`AuthorizeFilter` 是ASP.NET Core中用于授权的过滤器。通过添加这个过滤器,你可以为所有操作强制执行身份验证。
如果你已经知道如何注册全局过滤器,但遇到无法授权的问题,可能是因为授权配置不正确或中间件链中缺少必要的组件。以下是一些常见问题及解决方案:
1. 确保已配置身份验证服务: 在 `Startup.cs` 的 `ConfigureServices` 方法中,确保已经添加了身份验证服务,例如: csharp services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme);
2. 配置授权策略: 如果使用角色授权,确保在 `Startup.cs` 中配置了角色策略: csharp services.AddAuthorization(options=> { options.AddPolicy(RequireAdminRole, policy=> policy.RequireRole(Admin)); });
3. 在控制器或操作方法上应用策略: 如果你的过滤器需要特定策略,确保在控制器或操作方法上应用了正确的策略: csharp [Authorize(Policy=RequireAdminRole)] public IActionResult SomeAction() { // ... }
4. 检查中间件链: 确保中间件链中包含了 `AuthenticationMiddleware` 和 `AuthorizationMiddleware`。
如果以上步骤都正确,但仍然无法授权,可能需要检查具体的错误信息或日志,以确定问题所在。
如何强制/设置MVC Core中所有操作的全局授权?我知道如何注册全局过滤器 – 例如我有:
Setup.cs services.AddMvc(options => { options.Filters.Add(new RequireHttpsAttribute()); });
这工作正常,但我无法为授权添加相同的内容:
options.Filters.Add(new AuthorizeAttribute());
我有错误:
无法从’Microsoft.AspNet.Authorization.AuthorizeAttribute()’转换为’System.Type’
(Method .Add()需要IFilterMetadata类型)
我知道 – 从类似的问题 – 这适用于MVC4-5 ……所以必须在MVC Core上改变…
有人有什么想法吗?
services.AddMvc(config => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); config.Filters.Add(new AuthorizeFilter(policy)); });

