2017-02-09 20 views
1

Я новичок в аутентификации на основе токена. Что касается ссылок ниже, я пытаюсь понять аутентификацию на основе токенов.Как передать токен авторизации методу GET для доступа к авторизованному ресурсу?

Если учетные данные действительны, я получаю нужный маркер.

[AcceptVerbs("POST")] 
    [HttpPost] 
    public string Post([FromBody]User user) 
    { 
     if(user.Username == "hello" && user.Password == "123") 
     { 
      var accessTokenResponse = GenerateLocalAccessTokenResponse(user.Username); 

      return accessTokenResponse.ToString(); 
     } 
     else 
     { 
      return "User invalid"; 
     } 
    } 

Сформирован маркер

TWC1Q2rrenZC2p78KPnS4JblcepCg6q3XuxqBQIh7L003npbb6hlBAOYGRN03OvY_O55GWFkZp7UfCmhCgH9Z4rBsjvIrp8gyCp4HmxpP4axVKk10NM9fiG2ctgZWeSbw1jNOor42Wk3yMufbs4xP0RlNuvdpLtBLir52g9rPF053kiJtYryNGzPsbibXHRrNoy0wOR2384uLAJ5pNE9s1DwYpdPKB9uOLSAGhDQOVU,

Теперь, когда я пытаюсь получить доступ к защищенным ресурсам

[Authorize] 
    [HttpGet] 
    // GET api/orders/5 
    public string Get() 
    { 
     return "This is a secure resource"; 
    } 

Я получаю сообщение об ошибке «Доступ запрещен».

Как использовать токен для доступа к таким ресурсам.

Любая помощь/предложение высоко оценены. Спасибо.

+0

Возможно, этот ответ может дать вам более глубокое понимание: http://stackoverflow.com/questions/38661090/token-based-authentication-in-web-api-without-any-user-interface/38670221#38670221 –

+0

он работает сейчас? – jps

+0

@jps. Да .. Искреннее спасибо –

ответ

2

Как правило, вы не будете использовать конечную точку маркера в качестве метода POST в своем контроллере, но создайте для него отдельный класс (SimpleAuthorizationServerProvide), как показано в вышеупомянутом учебнике. Если все настроено правильно, вы должны добавить заголовок авторизации на запрос HTTP

Authorization: Bearer TWC1Q2rrenZC2p78KP... 

и получить ответ с кодом состояния 200 (OK)

Чтобы получить маркер отправить запрос (например, с помощью инструмента fiddler) на конечную точку вашего токена например если ваш сервис работает на локальном хосте на порту 52180 это выглядит следующим образом:

POST http://localhost:52180/token 

grant_type=password&username=admin&password=123&client_id=abc 

grant_type часть тела запроса. Когда вы отправляете вышеуказанный запрос, вы достигнете конечной точки маркера. Так же, как Тайзер написал на шаге 12 учебника.

Когда вы устанавливаете точку останова на GrantResourceOwnerCredentials, которая должна быть достигнута, как только вы отправите вышеуказанный запрос.

Обычный поток: - клиент запрашивает маркер из http://localhost:52180/token

  • сервер проверяет подлинность учетных данных пользователей в GrantResourceOwnerCredentials и выдает маркер

  • клиент читает access_token из маркера ответа

  • клиент добавляет заголовок авторизации, содержащий access_token, к запросу

    http://localhost:52180/api/orders 
    
    Authorization: Bearer TWC1Q2rrenZC2p78KP... 
    
  • сервер читает авторизацию заголовок и доступ грантов (если маркер является действительным)

  • запрос серверных процессов, например, запрос GET

  • клиента получает статус 200 и требуемые данные

Контроллер api, показанный выше, выглядит нормально Атрибут [Авторизовать] - это все, что вам нужно в вашем контроллере. Это добавляет AuthorizationFilter в конвейер http-запроса, который обрабатывает авторизацию для вас, когда клиент добавляет вышеупомянутый заголовок Authoriztion к запросу.

+0

Согласен. Но как добавить маркер авторизации для порядка получения. Пожалуйста, предложите –

+0

Это TokenEnd() https://codepaste.net/nirv5q –

+0

I Cross проверено, что все похоже на совпадение. –