2016-07-01 5 views
1

Недавно я присоединился к команде проекта, которому было поручено настроить роли пользователей для бэкэнд проекта. Он использует ASP.NET C# WebApi с Owin. Мой вопрос, когда я присвоить атрибут к методу контроллера, как это:Авторизация Owin запрещает ролю

[Authorize(Roles = "Admin")] 

Отклик всегда прав запрещен для данного запроса. Однако, если я просто использую:

[Authorize] 

Он работает. Обратите внимание, что я вхожу в систему с пользователем, которому была назначена роль администратора.

Я заметил, что этот вопрос похож на: Authorization roles WebAPI oauth owin

Тем не менее, кажется, их код в startup.cs отличается каким-то образом, или же я изо всех сил, чтобы правильно следовать ответ.

код в startup.cs, что я должен работать с это:

public void Configuration(IAppBuilder app) 
{ 
    // configure OAuth 
    ConfigureOAuth(app); 

    // configure Mvc 
    HttpConfiguration config = new HttpConfiguration(); 
    WebApiConfig.Register(config); 
    app.UseWebApi(config); 
} 

public void ConfigureOAuth(IAppBuilder app) 
{ 
    OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
    { 
     AllowInsecureHttp = true, 
     TokenEndpointPath = new PathString("/token"), 
     AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
     Provider = new SimpleAuthorizationServerProvider() 
    }; 

    // Token Generation 
    app.UseOAuthAuthorizationServer(OAuthServerOptions); 
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 
} 

Есть ли что-то еще мне нужно добавить здесь, чтобы для ролей или он должен быть где-то в коде. Я не совсем знаком с ASP.NET C# MVC или WebApi, любая помощь сильно оценена.

+0

Пожалуйста, покажите протоколирования логику и где вы назначаете претензий/Роли –

ответ

0

В SimpleAuthorizationServerProvider

у вас есть метод, как GrantResourceOwnerCredentials

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { 
await Task.Run(
() => { 
     ...logging logic... 
     var loginResult = authRepository.Login(context.UserName, context.Password); 
     if (!loginResult.Success) return; 
     ...logging logic... 

     var claims = new List <Claim>(); 
     claims.add(new Claim(ClaimTypes.Role, loginResult.Role)); < --here 
     var id = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ExternalBearer); 
     context.Validated(id); 
    }); 
} 

И loggingResult это то, что возвращается ваш репозиторий/DAL слоя

+0

отлично, но как найти идентификатор пользователя внутри этого, чтобы я мог получить их роль из БД? – Colum

+0

Я отредактировал свой ответ, вы можете получить доступ к context.UserName и context.Password свойства –

+0

Должен ли я расширить SimpleAuthorizationServerProvider, или есть способ переопределить его из Startup? Кроме того, я не вижу метода входа в этом репо. Я не создал этот проект или бэкэнд, мне просто нужно с ним работать:/ – Colum

Смежные вопросы