asp.net core 2.0 авторизация на основе ролей Windows всегда возвращает 403

Я пытаюсь настроить авторизацию на основе ролей на основе ролей Windows с помощью приложения asp.net core 2.0. Это конфигурация:

запускSettings.json:

   {
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:9180/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Bouwfonds.Gems.Onderhoud.Web.UI": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:9181/"
    }
  }
}

StartUp.cs:

  public void ConfigureServices(IServiceCollection services) {
    services.AddMvc();

    services.AddAuthentication(IISDefaults.AuthenticationScheme);

  }

и в контроллере:

//SID администраторов, использующих: psgetsid.exe Administrators

  [Authorize(Roles = @"S-1-5-32-544")] 
  public class HomeController : Controller

Аутентификация Windows работает, но я всегда получаю ошибку 403. Есть идеи?


person Robert Pouleijn    schedule 26.02.2018    source источник


Ответы (3)


Вот что я получил на работу. Многое из этого я собрал воедино, используя пример Microsoft Authorization Workshop https://github.com/blowdart/AspNetAuthorizationWorkshop. Хотя я использую политики вместо ролей.

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
         //Add policies as needed along with authorization classes
         options.AddPolicy("Admin", policy => policy.Requirements.Add(new AdminAuthorization()));
    });

    services.AddMvc(config => 
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        config.Filters.Add(new AuthorizeFilter(policy));
    });

    //Also add the Authorization Handlers
    services.AddSingleton<IAuthorizationHandler, AdminAuthorization>();

    serviecs.AddAuthentication(Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.AuthenticationScheme);
}

AdminAuthorization.cs

public class AdminAuthorization : AuthorizationHandler<AdminAuthorization>, IAuthorizationRequirement
{
     protected override Task HandleRequirementAsync(AuthrizationHandlerContext context, AdminAuthorization  requirement)
     {
         if(context.User.HasClaim(c => c.Value == @"S-1-5-32-544"))
         {
             context.Succeed(requirement);
         }
         else 
         {
             context.Fail();
         }
         return Task.CompletedTask;
     }
}

HomeController.cs

//Add the name of the policy used in the options.AddPolicy in the startup.cs
[Authorize(Policy = "Admin")] 
public class HomeController : Controller
{
    // your controller logic here
}
person Ramious    schedule 16.03.2018

Группа локальных администраторов добавляется как утверждение denyonlysid(?): "{http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid: S-1-5-32-544}", поэтому я думаю, что эта группа не работает. И, очевидно, когда вы добавляете себя в новую локальную группу, вам нужно перезагрузиться, прежде чем вы получите претензию: P

Так что теперь он работает с локальной группой даже без SID, а только с именем группы.

person Robert Pouleijn    schedule 28.02.2018

Ответ 403 обычно указывает на одно из двух условий:

  • Аутентификация была предоставлена, но аутентифицированному пользователю не разрешено выполнять запрошенную операцию.
  • Операция запрещена для всех пользователей. Например, запросы на список каталогов возвращают код 403, когда листинг каталогов отключен.

Вы уверены, что находитесь в данной группе? Сначала попробуйте авторизовать пользователя, а не роль:

[Authorize(Users="Alice, Bob, YourName")]

Если это работает, то либо вы не являетесь участником группы, либо группа не существует.

person gtu    schedule 26.02.2018
comment
Microsoft.AspNetCore.Authorization.AuthorizeAttribute не имеет свойства Users, но да, я уверен, что у меня есть эта роль. Я также попробовал новую локальную группу, поэтому вы можете просто сказать DESKTOP-V3136HA\RoleName, но с тем же результатом. - person Robert Pouleijn; 26.02.2018
comment
Можете ли вы посмотреть на HttpContext.Request.User.Identities, чтобы увидеть, добавляет ли промежуточное программное обеспечение пользователя IIS? - person BinaryPatrick; 26.02.2018