Проблема с символом «+» в строке токена, закодированной в URL-адресе, в приложении ASP.NET Core и AngularC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с символом «+» в строке токена, закодированной в URL-адресе, в приложении ASP.NET Core и Angular

Сообщение Anonymous »


У меня возникла проблема со строками, закодированными в URL-адресе, в моем приложении ASP.NET 8 Core и Angular 17, особенно при обработке функции сброса пароля. Проблема возникает с символом «+» в строке токена, закодированной в URL.

Бэкэнд (ASP.NET Core): У меня есть две конечные точки API: ForgotPassword и ResetPassword. В ForgotPassword генерируется токен, кодируется URL-адрес и отправляется на электронную почту пользователя. В ResetPassword токен декодируется и используется для сброса пароля пользователя.

// Конечная точка ForgotPassword // ... Код для генерации сброса токена ... вар encodedToken = HttpUtility.UrlEncode(resetToken); var resetLink = $"{frontendBaseUrl}/account/reset-password?token={encodedToken}&date={encodedDate}&email={HttpUtility.UrlEncode(user.Email)}"; дождитесь SendResetPasswordEmail (пользователь, resetLink); // ... Дополнительный код ... // конечная точка сброса пароля вар decodedToken = dto.Token.DecodeUrlAndRestorePluses(); результат вар = ждут _userManager.ResetPasswordAsync (пользователь, decodedToken, dto.NewPassword); // ... Дополнительный код ... Фронтенд (Angular): В своем компоненте Angular я извлекаю токен из URL-адреса и передаю его методу resetPassword:

// Извлечение токена, адреса электронной почты и даты из URL-адреса this.route.queryParams.subscribe(params => { this.token = params['токен']; this.email = params['email']; this.date = params['date']; }); // метод сброса пароля this.accountService.resetPassword(this.token, this.date, this.email, newPassword) .подписаться( /* ... */ ); Проблема: Если в токене присутствует символ +, где-то в процессе он преобразуется в пробел ( ). Это приводит к сбою проверки токена с ошибкой «неверный токен». Я уже пробовал использовать HttpUtility.UrlDecode и WebUtility.UrlDecode, но проблема не устранена.

Я добавил метод расширения DecodeUrlAndRestorePlus для решения этой проблемы, который, кажется, работает, но я не уверен, что это лучший подход.

публичная статическая строка DecodeUrlAndRestorePluses (эта строка закодированаString) { вар decodedString = HttpUtility.UrlDecode(encodedString); return decodedString.Replace(" ", "+"); } Вопросы:
[*]Почему символ + преобразуется в пробел и где может происходить это преобразование? [*]Есть ли более стандартный или фундаментальный способ решения этой проблемы без необходимости использования специального метода расширения? [*]Есть ли какие-либо потенциальные подводные камни или проблемы с безопасностью при моем нынешнем подходе?
Будем очень признательны за любые идеи или альтернативные решения этой проблемы.
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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