Как добавить аутентификацию токена в web api в проекте asp.net mvc на основе аутентификации cookie - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть проект asp.net mvc, который использует аутентификацию на основе файлов cookie, и я добавил к нему конечную точку веб-API после этого потока stackoverflow .Это работало как чудо, но когда я украшаю контроллер api [Authorize], запросы не могут аутентифицироваться, даже когда я предоставляю имя пользователя и пароль в почтальоне.Я бы хотел, чтобы ApiController разрешил аутентификацию на основе токенов, сохраняя аутентификацию на основе файлов cookie в части mvc.Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 23 сентября 2019

В Visual Studio 2019, когда вы создаете шаблон проекта Web API и выбираете индивидуальные учетные записи пользователей для аутентификации, vs реализует аутентификацию на основе токенов для вас, очень похожую на эту Статья .единственное отличие состоит в том, что статья использует устаревшую таблицу для хранения пользовательских данных, а код Microsoft использует знаменитую таблицу AspNetUsers.Я настоятельно рекомендую вам следовать этой статье и в конце заменить метод GrantResourceOwnerCredentials в файле ApplicationOAuthProvider следующим кодом:

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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...