Аутентификация пользователя MVC с помощью Web API

Обновить

November 2018

Просмотры

341 раз

0

Я построил WebAPI для входа пользователя, то WebAPI может генерировать маркер доступа, если пользователь при условии правильного имени пользователя и пароля. Мой вопрос, как я могу передать информацию роли пользователя в приложении MVC также.

Например,

У меня есть контроллер приложения MVC ниже, как я могу передать роль «Admin, UserEditor» от Web API? Я знаю, что могу использовать другой WebAPI вызов, чтобы проверить роль пользователя, но это не очень хорошая идея, чтобы сделать это.

[Authorized("Admin,UserEditor")]
ActionResult EditUser(int? Id)
{
........
} 

1 ответы

1

Вы должны использовать 2 механизмы аутентификации (однонаправленные лексемы и Cookies) , потому что ваши защищают конечную Web API точек с помощью маркеров и MVC 5 контроллеров с помощью Cookies. Я рекомендую вам проверить VS 2013 веб - шаблон с основной MVC зависимости выбранного. Он содержит весь код , необходимый в вашем случае. Внутри GrantResourceOwnerCredentialsметода вы найдете нечто подобное ниже:

        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

        ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);

        if (user == null)
        {
            context.SetError("invalid_grant", "The user name or password is incorrect.");
            return;
        }

        ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
           OAuthDefaults.AuthenticationType);
        ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
            CookieAuthenticationDefaults.AuthenticationType);

        AuthenticationProperties properties = CreateProperties(user.UserName);
        AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
        context.Validated(ticket);
        context.Request.Context.Authentication.SignIn(cookiesIdentity);
    }

Обратите внимание на то, как есть oAuthIdentityдля Web API, а также cookiesIdentityдля применения MVC.