Код подтверждения адреса электронной почты в URL-адресе приложения (развернут в Azure) не найден конечный пункт - PullRequest
0 голосов
/ 29 августа 2018

У меня настроена конечная точка проверки подлинности электронной почты .net, подобная этой:

/api/[controller]/{userId}/{emailVerificationCode} 

и я закодировал его в конечной точке регистрации с помощью Uri. EscapeDataString (декодирование с помощью Uri. UnescapeDataString, но здесь это не имеет значения). Поэтому, когда я получаю электронное письмо и нажимаю на ссылку, локально я обращаюсь к конечной точке и могу отладить ее, но после развертывания в azure (группа ресурсов веб-приложения) я получаю следующий ответ:

The resource you are looking for has been removed, had its name changed,
or is temporarily unavailable.

Когда я укорачиваю код, чтобы он не содержал никаких специальных символов (которые теперь закодированы, например, % 2F , % 3D и т. Д.), Достигается конечная точка (, но Недопустимый токен ofc ). Есть идеи, в чем может быть дело?

1 Ответ

0 голосов
/ 29 августа 2018

Сгенерированный код имеет кодировку Base64, и некоторые символы в Base64 не разрешены в сегменте пути URL-адреса по умолчанию из соображений безопасности, даже если кодируется URL-адрес. Хотя это можно изменить, вы не должны этого делать, поскольку проблемы безопасности действительны, и вы не хотите подвергать свое приложение эксплойтам.

Вместо этого вы можете просто позволить коду быть частью строки запроса. Та же самая уязвимость не существует для части строки запроса URL, и символы будут разрешены там. Кроме того, вы можете использовать другой тип кода. Поставщики токенов, используемые Identity для таких вещей, как подтверждение по электронной почте и сброс пароля, могут быть настроены.

Идентификация включает в себя других поставщиков токенов для целей двухфакторной аутентификации, с которой вы можете переключиться, если хотите. В них используются токены на основе TOTP (6-7-значные числа, которые вы постоянно видите с 2FA). Или вы можете создать свой собственный провайдер и обрабатывать его так, как вам нравится. Чтобы сменить провайдера, вы просто настраиваете участника Tokens при настройке удостоверения:

services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
    // other options here like password reqs, etc.
    o.Tokens.ChangeEmailTokenProvider = TokenOptions.DefaultEmailProvider;
    o.Tokens.EmailConfirmationTokenProvider = TokenOptions.DefaultEmailProvider;
    o.Tokens.PasswordResetTokenProvider = TokenOptions.DefaultEmailProvider;
}

Приведенное выше описание приведет к тому, что эти три сценария будут генерировать токены с помощью EmailTokenProvider, который является одним из встроенных поставщиков TOTP.

Если вы хотите использовать собственного провайдера, вы просто создаете класс, который реализует IUserTwoFactorTokenProvider<TUser>, и регистрируете это:

services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
    ...
})
.AddTokenProvider<MyCustomTokenProvider<ApplicationUser>>("MyTokenProviderName");

Строка, которую вы используете как «имя», - это то, что вы использовали бы, чтобы назначить ее в качестве провайдера токена в предыдущем коде выше, т.е.

o.Tokens.PasswordResetTokenProvider = "MyTokenProviderName";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...