Безопасна ли эта реализация djoser?Jquery

Программирование на jquery
Ответить Пред. темаСлед. тема
Anonymous
 Безопасна ли эта реализация djoser?

Сообщение Anonymous »

Возможно, этот вопрос слишком широк для StackOverflow, но я не уверен, куда еще обратиться за помощью.
Я написал простую систему аутентификации в Django с помощью Djoser и его реализации JWT. , используя jQuery во внешнем интерфейсе, но я не уверен, правильно ли я это сделал и безопасно ли это.
Сначала, когда пользователь отправляет форму входа, я отправляю POST-запрос на получить токен обновления и токен доступа. Токен обновления хранится в файле cookie или файле cookie сеанса (в зависимости от установленного флажка), а токен доступа хранится в файле cookie сеанса:

Код: Выделить всё

// Post the form
$.post("/auth/jwt/create/", $(this).serialize())
// Success: store tokens & redirect
.done(function(data) {
// Logged in: set redirect path & store tokens
if (data.refresh !== "undefined" && data.access !== "undefined") {
if (remember) Cookies.set("refresh_token", data.refresh, { expires: 30, secure: true, sameSite: "strict" });
else Cookies.set("refresh_token", data.refresh, { secure: true, sameSite: "strict" });
Cookies.set("access_token", data.access, { secure: true, sameSite: "strict" });
}
})
У меня есть еще один простой скрипт, который запускается каждый раз при загрузке страницы. Там я проверяю токен доступа, пытаюсь обновить его, если он недействителен, получаю пользовательские данные с помощью токена доступа, а затем отправляю эти пользовательские данные и токен доступа на серверную часть для входа в систему. Этот скрипт также выводит пользователя из системы, если он находится на странице выхода:

Код: Выделить всё

$("meta[name='csrf-token']").ready(function() {
// Log in or out
function auth(data, access_token) {
$.post("/auth/", {
"user": data,
"access_token": access_token,
"csrfmiddlewaretoken": $("meta[name='csrf-token']").attr("content"),
});
}

// Remove tokens & log out
function logout(reload=true) {
Cookies.remove("refresh_token");
Cookies.remove("access_token");
auth("", "");
}

// Authorize: get user data & log in
function authorize() {
let access_token = Cookies.get("access_token");

$.ajax({
url: "/auth/users/me/",
headers: { "Authorization": "JWT " + access_token },
})
// Success: log in
.done(function(data) { auth(JSON.stringify(data), access_token); })
// Fail: log out
.fail(function() { logout(); });
}

// Refresh access token
function refresh() {
if ("refresh_token" in Cookies.get()) {
$.post("/auth/jwt/refresh/", { "refresh": Cookies.get("refresh_token") })
// Success: store new access token & authorize
.done(function(data) {
Cookies.set("access_token", data.access, { secure: true, sameSite: "strict" });
authorize();
})
// Fail: log out
.fail(function() { logout(); });
}
// No refresh token: log out
else logout();
}

// Verify access token & authorize or refresh
function verify() {
if ("access_token" in Cookies.get()) {
$.post("/auth/jwt/verify/", { "token": Cookies.get("access_token") })
// Success: authorize
.done(function() { authorize(); })
// Fail: refresh access token
.fail(function() { refresh(); });
// No access token: refresh
} else refresh();
}

// Log out page
if (window.location.pathname == "/logout/") {
// Log out & redirect
logout(false);
}

// Attempt login
else verify();
});
Наконец, на серверной стороне я вхожу или выхожу из системы с помощью собственного входа в систему Django и выхожу из системы, проверяя токен доступа POSTed по файлу cookie сеанса:
р>

Код: Выделить всё

def auth(request):
if not request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' or not request.method == "POST":
return HttpResponseNotAllowed(["POST"])

user_post = request.POST.get("user")
user = None

if user_post != "" and request.POST.get("access_token") == request.COOKIES.get('access_token'):
user_post = json.loads(user_post)
if "id" in user_post and "username" in user_post and "email" in user_post:
user = User.objects.filter(id=user_post["id"], username=user_post["username"], email=user_post["email"]).first()

if user == None and request.user != None and request.user.is_authenticated:
logout(request)
return HttpResponse("User logged out.")
elif user != None and user != request.user:
login(request, user)
return HttpResponse("User logged in.")
else:
return HttpResponse("No change.")
Что меня больше всего беспокоит, так это та часть, где пользователь может войти в систему через POST без пароля (но с токеном доступа).

Подробнее здесь: https://stackoverflow.com/questions/793 ... ion-secure
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Эта реализация Joser безопасна?
    Anonymous » » в форуме Jquery
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Вход в Djoser не работает с Docker-compose, Worker завершен с помощью Signal 11
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Вход в Djoser не работает с Docker-compose, Worker завершен с помощью Signal 11
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Безопасна ли функция find() unordered_map при работе с unordered_map через несколько потоков [дубликат]
    Гость » » в форуме Linux
    0 Ответы
    15 Просмотры
    Последнее сообщение Гость
  • Безопасна ли отправка и получение TCP-сокета из двух выделенных потоков в Linux?
    Anonymous » » в форуме Linux
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Jquery»