如何强制/设置MVC Core中所有操作的全局授权?
我知道如何注册全局过滤器 - 例如我有:
Setup.cs
services.AddMvc(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我无法为授权添加相同的内容:
options.Filters.Add(new AuthorizeAttribute());
我有错误:
Cannot convert from 'Microsoft.AspNet.Authorization.AuthorizeAttribute()' to 'System.Type'
(方法.Add()需要IFilterMetadata类型)
我知道 - 从类似的问题 - 这适用于MVC4-5 ......所以必须在MVC Core上改变...
有人有什么想法吗?
如何在web.config中指定根位置以允许未经身份验证的用户访问它?
根位置由default.aspx提供,但用户通常看不到default.aspx,他们只是看到了http://mysite.com/.
所以我补充道
<location path="~/default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
如果用户点击mysite.com/default.aspx,则有效,但如果用户点击mysite.com/- 他仍然会被重定向到登录页面.
我试过<location path="~">(不利于)也<location path="~/">,<location path="">(现场完全失败),并不能使它发挥作用.
有任何想法吗?
我有一个使用声明的ASP.Net WebAPI 2应用程序.声明在标准Identity2 AspNetUsers表中存储为两个附加列:
CREATE TABLE [dbo].[AspNetUsers] (
[Id] INT IDENTITY (1, 1) NOT NULL,
....
[SubjectId] INT DEFAULT ((0)) NOT NULL,
[LocationId] INT DEFAULT ((0)) NOT NULL,
CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC)
);
Run Code Online (Sandbox Code Playgroud)
我修改了ApplicationUser类,如下所示:
public class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager, string authenticationType)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
ClaimsIdentity userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
// Add custom user claims here
userIdentity.AddClaim(new Claim("SubjectId", this.SubjectId.ToString())); …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc asp.net-authorization asp.net-web-api asp.net-identity-2
我想保护我的应用程序中的特定文件夹和资源,这些文件夹和资源位于我的mvc应用程序的路由之外.我希望这些资源仅供经过身份验证的用户使用(只要经过身份验证,该角色就不具备这些角色).
最初似乎UrlAuthorizationModule就是答案.我按照本文,了解IIS 7.0 URL授权,我可以让模块工作,因为它响应了中的配置元素web.config.
我目前的问题是,我认为它是基于IIS中的匿名用户而不是asp.net身份中经过身份验证的用户制定的规则.
我使用标准html文件进行测试,而不是尝试加载脚本,因为这也会在MVC管道之外加载.
Visual Studio 2015.
.net 4.6.2Web项目Individual User Accounts添加 web.config
<configuration>
...
<location path="Data">
<system.webServer>
<security>
<authorization>
<clear/>
<add accessType="Deny" users="*"/>
<add accessType="Allow" users="?"/>
</authorization>
</security>
</system.webServer>
</location>
...
</configuration>
Run Code Online (Sandbox Code Playgroud)
添加到文件夹结构
/Data/Protected.html // this file just has some basic Hello World content to display so …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc asp.net-authorization asp.net-identity-2
我第一次玩MVC 4来查看与MVC 3相比已经更改/添加/等等的内容.
首先,我创建了一个空白的MVC 4 Web应用程序,并从头开始构建.
我注意到的第一件事与MVC 4不同的是,以下web.config设置对网页的可访问性没有影响:
<configuration>
<location path="">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
.....
</configuration>
Run Code Online (Sandbox Code Playgroud)
回到MVC 3,上面的授权设置将拒绝所有匿名用户访问站点内的任何内容.但是,如果我将相同的设置添加到MVC4 Web.config文件中,则匿名者可以自由选择他/她选择的URL.
我在MVC 4中需要做什么来锁定所有路径,就像我在MVC 3中那样?
asp.net-mvc forms-authentication web-config asp.net-authorization
我正在尝试尽可能简单地在我的 asp.net 核心 webAPI 上实现 JWT 身份验证。我不知道我错过了什么,但即使使用正确的不记名令牌,它也总是返回 401 。
这是我的 configureServices 代码
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(
x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("A_VERY_SECRET_SECURITY_KEY_FOR_JWT_AUTH")),
ValidateAudience = false,
ValidateIssuer = false,
};
}
);
services.AddControllers();
services.AddDbContext<dingdogdbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("dingdogdbContext")));
}
Run Code Online (Sandbox Code Playgroud)
这就是我生成令牌的方式
[AllowAnonymous]
[HttpPost("/Login")]
public ActionResult<User> Login(AuthModel auth)
{
var user = new User();
user.Email = auth.Email; …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-authorization jwt asp.net-web-api asp.net-core
我们有一个调用客户端请求我们的系统没有将Bearer令牌放在标准位置('Authorization'标题)我想创建一个自定义处理程序,在正确的位置查找JWT.除了分支JwtBearerMiddleware实现是否有任何更清洁的方式我可以告诉中间件使用什么处理程序?
更简单的选择是通过在JWT中间件运行之前将JWT注入请求管道中的正确位置(请求头)来重写请求.但这似乎有点hacky.
.net asp.net-authorization jwt asp.net-core asp.net-core-middleware
在ASP.NET中,FormsAuthenticationModule拦截任何HTTP 401,并返回HTTP 302重定向到登录页面.这对AJAX来说很痛苦,因为你要求json并在html中获取登录页面,但状态代码是HTTP 200.
在ASP.NET Web API中避免这种拦截的方法是什么?
在ASP.NET MVC4中,通过明确结束连接来防止此拦截非常容易:
public class MyMvcAuthFilter:AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest() && !filterContext.IsChildAction)
{
filterContext.Result = new HttpStatusCodeResult(401);
filterContext.HttpContext.Response.StatusCode = 401;
filterContext.HttpContext.Response.SuppressContent = true;
filterContext.HttpContext.Response.End();
}
else
base.HandleUnauthorizedRequest(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
但是在ASP.NET Web API中我无法显式结束连接,因此即使我使用此代码,FormsAuthenticationModule也会拦截响应并将重定向发送到登录页面:
public class MyWebApiAuth: AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if(actionContext.Request.Headers.Any(h=>h.Key.Equals("X-Requested-With",StringComparison.OrdinalIgnoreCase)))
{
var xhr = actionContext.Request.Headers.Single(h => h.Key.Equals("X-Requested-With", StringComparison.OrdinalIgnoreCase)).Value.First();
if (xhr.Equals("XMLHttpRequest", StringComparison.OrdinalIgnoreCase))
{
// this does not work either
//throw new HttpResponseException(HttpStatusCode.Unauthorized);
actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); …Run Code Online (Sandbox Code Playgroud) asp.net forms-authentication asp.net-authorization asp.net-mvc-4 asp.net-web-api
我正在尝试使用Asp.Net核心身份实现IdentityServer4.我想使用IdentityServer4作为使用始终相同标识的API的集中身份验证/授权点.因此,我们的想法是将Asp.Net核心标识内容存储在充当身份存储库的SQL数据库中.
现在的问题是如何将集中身份映射到特定于应用程序的数据.我想在多个应用程序中使用相同的身份用户,但在每个应用程序中,用户都有其他相关实体,角色等.
我阅读了IdentityServer4的文档,但找不到与建议的结构相关的任何内容.
据我所知,您以某种方式将身份ID映射到本地应用程序用户.诸如firstname等的基本数据存储在集中式身份存储中,并且应用程序特定数据存储在应用程序特定数据库中.所以你不会在应用程序特定的数据库中保存名字等吗?在您需要的每个请求中,用户特定数据将查询身份服务器以获取信息/声明?注册流程怎么样?
有没有人有一个清晰的结构设置,可用于了解整个设置?(与Asp.Net Identity Provider,IdentityServer4,Protected Api等分离.)
asp.net-authorization asp.net-core identityserver4 asp.net-core-identity
作为ASP MVC的新手,我不确定哪个更适合我的需求.我使用Windows身份验证构建了一个Intranet站点,并且我能够使用Active Directory角色保护控制器和操作,例如
[Authorize(Roles="Administrators")]
[Authorize(Users="DOMAIN\User")]
public ActionResult SecureArea()
{
ViewBag.Message = "This is a secure area.";
return View();
}
Run Code Online (Sandbox Code Playgroud)
我需要独立于AD角色定义自己的安全角色.所需的功能是,根据与我们的应用程序数据库中的配置文件相关联的一个或多个角色,经过身份验证的用户被授予对特定操作的访问权限,例如:"经理","用户","访客","分析师","开发人员"等.
如何创建自定义角色提供程序和/或自定义授权属性?
asp.net asp.net-mvc windows-authentication asp.net-authorization asp.net-mvc-5