2016-07-22 4 views
1

Я совершенно не знаком с работой с JWT, и я боюсь в определенный момент:Работа с JWT, как проверить авторизацию-заголовок?

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

Как использовать JWT для «обычных» запросов? F.E. при перезагрузке страницы или просто по ссылке.

F.e. если пользователь не вошел в систему, я хочу перенаправить его на целевую страницу.

На стороне сервера у меня есть промежуточное программное обеспечение, которое проверяет JWT из заголовка авторизации, а затем либо предоставляет разрешение, либо перенаправляет на целевую страницу, но в настоящее время я всегда получаю целевую страницу, потому что нет заголовок авторизации для запросов без аякса.

Я храню JWT в localstorage.

Что мне не хватает?

С уважением

ответ

0

Вы можете хранить JWT в Cookie. Таким образом, они будут отправляться с каждым запросом (включая «обычные»). Вот фрагмент кода из одного из моих проектов:

func loginHandler(w http.ResponseWriter, r *http.Request) { 
    ... 
    accessToken := newAccessToken(...) // returns a JWT with fields .Token and .Expires 
    cookie := &http.Cookie{ 
     Name:  "access_token", 
     Value: accessToken.Token, 
     HttpOnly: true, 
     Secure:true, 
     Expires: time.Unix(accessToken.Expires, 0), 
     Path: "/", 
    } 
    http.SetCookie(w, cookie) 
    ... 
} 

И извлечь маркер:

func someHandler(w http.ResponseWriter, r *http.Request) { 
    cookie, err := r.Cookie("access_token") 
    if err != nil { 
     // handle missing cookie 
    } 
    accessToken := cookie.Value 
    ... 
} 

Обратите внимание, что Cookies уязвимы для атак CSRF.

Дальнейшее чтение: Where to Store your JWTs – Cookies vs HTML5 Web Storage

0

Просто вы не можете установить его для обычных запросов, как это аутентификация на уровне приложений, которые могут быть обработаны только в JS. Вы должны указать и конечную точку, которая не требует аутентификации и обслуживает страницу, а затем в JS вы должны проверить, есть ли сохраненная JWT и действовать соответственно (либо перейти на страницу входа в систему, либо загрузить приложение). Это сильно зависит от вашей инфраструктуры интерфейса JS.

+0

hm..not с помощью рамки внешнего интерфейса, как угловые или реагировать. пытаясь избежать этого :(Мне нравится, когда сервер визуализирует представления и просто улучшает UI/UX с помощью ajax-вызовов. Но я начинаю ощущать, что не уйду с ним, используя JWT вместо «классической» авторизации метод –

+0

Хорошо, это не проблема, вы все равно должны действовать, как описано выше. JWT должен быть установлен в заголовках кодом приложения JS при вызовах Ajax. Извините, но JWT в ссылке ниже ...вы должны создать полный webapp с маршрутизацией и представлениями для обработки изменений страницы. – Peterdeka

0

Посмотрите на JSON, веб-маркера RFC https://tools.ietf.org/html/rfc7519

JSON веб-маркера (JWT) представляет собой компактные претензии форматого представление предназначена для ограниченного пространства сред, таких как HTTP-авторизации заголовки и URI запрос параметров

там не обязан использовать заголовок. Вы можете отправить JWT в качестве параметра запроса в URL или в поле в форме POST.

Для ссылки, просто включите JWT как пары url?JWT=...

В вашем сервере вам приходится иметь дело со всеми способами получения JWT

+0

любые проблемы безопасности, отправляющие токен в качестве параметра? Я имею в виду ... кроме того, что уродливый я не вижу, как это может быть опасно по сравнению с атрибутом заголовка? –

+0

Если злоумышленник перехватит ваше соединение, он увидит заголовки и полезную нагрузку, обе формы и с помощью ajax. Используйте https в любом случае. Также избегайте публичных ссылок с информацией об аутентификации или используйте короткое время истечения срока действия – pedrofb

+0

Ответ Педро - правильный вариант, однако это не так «счастливо». Вы можете понести ненужные несанкционированные запросы (bad ux), когда истекает срок действия токена. Предоставление запросов JS-дескриптора позволит вам обрабатывать обновление токена и другие проблемы прозрачным образом пользователя. – Peterdeka

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