标签: asp.net-authorization

使用Windows身份验证的MVC3 Web应用程序中的权限提升

我需要在MVC3 Web应用程序中实现用户权限提升,对于Forms和Windows身份验证,但这个问题对于Windows身份验证至关重要.这是为了更高权限的用户向较低特权用户提供帮助,例如当文书用户执行任务并且需要管理员用户在文书用户可以继续之前完成任务时,管理员用户应该能够提升与其权限级别相同的会话,执行管理任务,并将较低权限还原到会话.在没有文书用户注销和管理员用户登录的情况下,我没有看到这样的方法,因为我们希望仅在文书用户的桌面上实现这一点.也许用户切换比整个新会话更整洁,但我非常喜欢Windows认证的Web应用程序的"运行"等效项.

这是否可能,如果是这样,我怎样才能做到这一点?我不知道在哪里开始寻找.

asp.net-mvc asp.net-authorization asp.net-mvc-3

10
推荐指数
2
解决办法
664
查看次数

ASP.NET MVC如何创建自定义角色提供程序

作为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

10
推荐指数
1
解决办法
2万
查看次数

根据ASP.NET Core中请求标头中提供的API密钥授权用户

我正在尝试重写我目前在ASP.NET Core中为ASP.NET 4.6提供的一些授权.

我知道Authorization已经发生了一些变化,我发现很难在ASP.NET Core中实现我非常简单的auth策略.

我的要求:

对服务器的每个请求都应包含一个名为"key"的标头.根据该密钥的值,我将能够查询数据库并检查该密钥是代表普通用户还是管理员用户.如果请求不包含有效密钥,则不会授权该请求.

我将如何在ASP.NET Core中实现它?我发现的每一个例子对我的需求来说都显得过于苛刻.

在ASP.NET 4.6中,我使用自己的自定义AuthorizeAttributes在我的控制器上使用,例如

[User]
public IHttpActionResult DoSomethingOnlyUsersCanDo() {}
Run Code Online (Sandbox Code Playgroud)

[Admin]
public IHttpActionResult DoSomethingOnlyAdminsCanDo() {}
Run Code Online (Sandbox Code Playgroud)

我可以在ASP.NET Core中执行相同的操作吗?

authorization asp.net-authorization asp.net-core asp.net-core-identity

10
推荐指数
1
解决办法
6366
查看次数

澄清身份授权:将声明用作角色,角色和声明或角色声明

我从ASP.NET身份的声明授权开始,如果我需要在我的应用程序中使用"角色"概念,我想澄清继续使用它们的方式.

注意:我对此真的很新,所以所有的概念都在脑子里浮现,请善待,任何概念的进一步澄清/更正将非常感激.

1.-假设,我需要管理员和用户角色的"角色"概念,所以我的第一个想法是将声明添加到ApplicationUser:

user.Claims.Add(new IdentityUserClaim<string> { ClaimType = "Role", ClaimValue = "Admin" });
Run Code Online (Sandbox Code Playgroud)

*"用户"是一个ApplicationUser.

但后来我读到它已经由框架完成,因为它有一些预定义的声明类型,所以上面的代码可能是:

user.Claims.Add(new IdentityUserClaim<string> { ClaimType = ClaimTypes.Role, ClaimValue = "Admin" });
Run Code Online (Sandbox Code Playgroud)

这种方法是否正确?或者我应该使用"旧"角色概念并向用户添加角色,如:

await _roleManager.CreateAsync(new IdentityRole("Admin"));    
await _userManager.AddToRoleAsync(user, "Admin");
Run Code Online (Sandbox Code Playgroud)

2.-现在假设我将角色定义为声明,我如何检查它们的自动化?我的意思是,它会起作用吗?

[Authorize(Roles = "Admin")]
Run Code Online (Sandbox Code Playgroud)

或者我应该包含一个政策声明来检查角色声明?

/* In startup ConfigureServices method*/
options.AddPolicy("IsAdmin", policy => {
                policy.RequireClaim(ClaimTypes.Role, "Admin");
                });

...

/*In a controller class*/
[Authorize(Policy = "IsAdmin")]
<controller here>
Run Code Online (Sandbox Code Playgroud)

3.-现在,存储我的自定义索赔的正确方法是什么?我的意思是,ASP.NET的ClaimTypes类只是一堆const string值,所有关于Claims的示例代码都将它们存储在类似的类中:

public static class ClaimData
{
    public static List<string> AdminClaims { get; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-authorization asp.net-identity asp.net-core-mvc

9
推荐指数
1
解决办法
1182
查看次数

如何向 ASP.NET Core 6 MVC 添加全局授权属性?

我想将[Authorize]数据属性设置为应用程序而不是控制器

[Authorize]
public class CustomerController : Controller {}
Run Code Online (Sandbox Code Playgroud)

这样[Authorize]我就可以仅为该控制器设置授权;我想为每个控制器设置它。

到目前为止,我在program.cs课堂上尝试过这些......

var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();

services.AddMvc(config =>
{
    config.Filters.Add(new AuthorizeFilter(policy));
});
Run Code Online (Sandbox Code Playgroud)

两者都不起作用 - 它构建了应用程序,但在浏览器上它无法访问网站。那么如何在 .NET 6 中全局设置此属性?

builder.services.AddMvc(options => options.Filters.add(new AuthorizeAttribute));
Run Code Online (Sandbox Code Playgroud)

这会引发错误

无法解析方法“Add(Microsoft.AspNetCore.Authorization.AuthorizeAttribute)”

asp.net-authorization asp.net-core-mvc .net-6.0

9
推荐指数
1
解决办法
1万
查看次数

在ASP.NET MVC Web API服务和MVC客户端体系结构中实现身份验证和基于角色的授权

在为我的Web API(服务) - MVC(客户端)架构项目实现身份验证/授权方案时,我很难确定方法.即使我已经在Web API项目中实现了基于自定义令牌的身份验证,但我发现很难确切地实现授权(在客户端或API本身).


架构概述:

  • 项目解决方案 -
    |
    | __基于ASP.NET Web API的REST服务(在M/C 1上独立托管在IIS上)
    |
    | __基于ASP.NET MVC的客户端(在M/C 2上独立托管在IIS上,使用REST服务)
    |
    | __智能手机客户端应用程序(使用REST服务)

已经实现了身份验证:

  • Web API中基于令牌的身份验证(使用消息处理程序) - 为经过身份验证的用户生成SHA1 encripted令牌,该令牌需要是每个http请求头的一部分以进行身份​​验证.
    (令牌=用户名+用户IP)

  • 受SSL保护的HTTP请求.(再次,使用消息处理程序)

目前的问题:

  1. 授权应在哪一层实施?
  2. 如何在客户端保留用户角色?使用Cookies?或者向Token本身添加角色信息(这可能会增加API解密信息的开销和额外的DB调用以检索与该角色相关的权限)
  3. 如何使用客户端会话保持身份验证令牌?
  4. 因为,我的应用程序是SPA MVC应用程序,将身份验证令牌作为我对API进行的每个AJAX调用的一部分包含的最佳方法是什么?

我希望,考虑到整个身份验证/授权概念,我做错了.因此,我将不胜感激任何替代方法/建议.

asp.net asp.net-mvc asp.net-authorization asp.net-mvc-4 asp.net-web-api

8
推荐指数
1
解决办法
8531
查看次数

MVC 4 AuthorizeAttribute.HandleUnauthorizedRequest ViewResult - 无限循环

我已经完成了我的代码一百万次,并且无法找到我的实现问题.

在自定义AuthorizeAttribute中我覆盖了2个方法

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (!httpContext.Request.IsAuthenticated)
            return false;
        var routeData = httpContext.Request.RequestContext.RouteData;
        var ctrl = routeData.Values["controller"].ToString();
        var action = routeData.Values["action"].ToString();
        var user = httpContext.User.Identity.Name;
        _logger.Info("[logging all the details]");
        return ctrl == "SomeController";
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext ctx)
    {
        ctx.Result = new ViewResult  { ViewName = "Unauthorized" };
        // base.HandleUnauthorizedRequest(ctx);
     }
Run Code Online (Sandbox Code Playgroud)

授权逻辑被模拟为仅在特定控制器上返回false,并且我已逐步完成此操作以验证它是否正常工作.

上面的代码会导致无限循环.在我的日志中我可以看到该行达到了666次(巧合?)

如果我打电话给base.HandleUnauthorizedRequest(ctx),我得到的只是一个空白页面.所以我反映了基地的作用,就是这样

filterContext.Result = new HttpUnauthorizedResult();
Run Code Online (Sandbox Code Playgroud)

所以这解释了为什么它呈现一个空白页而不是重定向到Unauthorized.cshtml.我不确定的是,如果我不打电话给基地,为什么它会进入无限循环.

PS

我已经验证,如果我放错了未经授权的视图,它将会出错(但仍会无限期挂起)

 System.InvalidOperationException: The view 'Unauthorized11' or its master was not found or no view engine supports …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-authorization asp.net-mvc-4

8
推荐指数
2
解决办法
2万
查看次数

仅允许匿名用户通过web.config授权

我想在web.config中使用授权来阻止对经过身份验证的用户访问SignUp.aspx.用户无法访问它,例如他们的角色是administrator和Guest.

<location path="SignUp.aspx">
    <system.web>
        <authorization>
            <allow users="?"/>
        </authorization>
    </system.web>
</location>

    <authentication mode="Forms">
        <forms name="AuthCookie" loginUrl="Login.aspx" timeout="60" 
                           defaultUrl="Index.aspx"/>
    </authentication>
    <authorization>
        <deny users="?"/>
    </authorization>
Run Code Online (Sandbox Code Playgroud)

asp.net role-base-authorization asp.net-authorization

7
推荐指数
1
解决办法
2万
查看次数

身份验证和授权作为中央微服务 ASP.NET

我计划将 ASP.NET Web API 2.0 包括身份验证和授权以及所有服务更改为微服务架构。

我的问题是否创建了一个中央微服务来处理身份验证和授权。我如何授权用户将带有令牌的请求发送到其他服务?

详细说明这个问题:

假设我有三个微服务。1 ) ASP NET 框架处理身份验证和授权,它将对用户进行身份验证并发送令牌。2 ) 订单服务,它将接收带有标头中的令牌的请求。(ASP NET core) 3 ) Accounting 服务,它将接收带有标头中的令牌的请求。(ASP.NET 核心)

当用户调用服务 2 或 3 时,我们如何授权用户?这是一种理想的方法吗?

asp.net-authorization asp.net-web-api asp.net-identity microservices asp.net-core

7
推荐指数
2
解决办法
6603
查看次数

ASP.Net Core 6 中具有自定义授权的 Azure AD 身份验证

我已使用标准方式在 ASP.Net Core 6 中实现了 Azure AD 身份验证,并在控制器类顶部使用了 [Authorize] 属性。所有这些都工作正常。

builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration, "AzureAd");
Run Code Online (Sandbox Code Playgroud)

除了身份验证之外,我还尝试使用 TypeFilterAttribute 类构建自定义授权。代码片段如下:

public class CustomAuthorizeAttribute : TypeFilterAttribute
{
    public CustomAuthorizeAttribute(params Roles[] roles) : base(typeof(CustomAuthorizeFilter))
    {
        Roles[] _roles = roles;
        Arguments = new object[] { _roles };
    }
}

public class CustomAuthorizeFilter : IAuthorizationFilter
{
    private readonly Roles[] _roles;
    private readonly IUserService _userService;

    public CustomAuthorizeFilter(Roles[] roles, IUserService userService)
    {
        _roles = roles ?? throw new UnauthorizedAccessException("OnAuthorization : Missing role parameter");
        _userService = userService;
    }

    public async void OnAuthorization(AuthorizationFilterContext …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-authorization azure-active-directory asp.net-core-webapi

7
推荐指数
1
解决办法
1623
查看次数