Blazor Authentication 1: Основы

Поділитися
Вставка
  • Опубліковано 2 гру 2024

КОМЕНТАРІ • 59

  • @arkadii_kuznetsov
    @arkadii_kuznetsov 4 роки тому +2

    Сергей, благодарю за видео.
    Все структурировано и без воды.
    Весьма информативно и полезно.
    Приятно наблюдать за Вашей работой.

    • @SergeiCalabonga
      @SergeiCalabonga  4 роки тому

      Спасибо за высокую оценку моего скромного труда. 😊

  • @ПрограмированиеПрограмирование

    Огромное Спасибо за видео!

    • @SergeiCalabonga
      @SergeiCalabonga  4 роки тому

      И вам спасибо, за то что смотрите и комментарии приятные пишете!

  • @Mr43046721
    @Mr43046721 3 роки тому +1

    Большое спасибо за полезные видео!

  • @MishaTitkov
    @MishaTitkov 2 роки тому

    Спасибо за ролик очень полезно)

  • @OvRaf
    @OvRaf 3 роки тому +3

    читаю...
    "For server-side Blazor, it is very unlikely that you should implement a custom AuthenticationStateProvider. The built-in implementation already integrates with ASP.NET Core's built-in authentication mechanisms. If you implement a custom one, you may introduce security vulnerabilities.
    The only common scenario for a custom AuthenticationStateProvider is client-side Blazor, because in that case you may want to integrate with any number of external authentication systems independently of your server-side code. Also, in client-side Blazor, authentication only exists to present a convenient UI to well-behaved users - it's not actually the place where security is enforced, since client-side rules can always be bypassed."
    я так понимаю, что для server-side мне советуют использовать встроенный identity provider.
    как же быть, если я хочу аутенфицироваться на IdentityServer4 ?

    • @SergeiCalabonga
      @SergeiCalabonga  3 роки тому +1

      Мне кажется, что тут преследуется другая мысль. Дело в том, что доля правды есть, и касается она не только blazor приложения. Встроенный механизм может легко интегрироваться с внешними провайдерами. Отсюда и рекомендации. А ещё, иожет потому что в blazor не до конца оформившийся фреймворк.

    • @scdecade
      @scdecade 2 роки тому

      Yes I agree the only valid claim on the client is the token itself

    • @SergeiCalabonga
      @SergeiCalabonga  2 роки тому

      👍

  • @ivanb8662
    @ivanb8662 4 роки тому +1

    Не рекомендовали же делать на wasme авторизацию

    • @SergeiCalabonga
      @SergeiCalabonga  4 роки тому

      Всё равно придется, как и для любого другого SPA

  • @ИгорьСтепанов-ъ7ц
    @ИгорьСтепанов-ъ7ц 3 роки тому

    Сергей, расскажите, пожалуйста, о расширениях в VSC, которые вы используете, а также о настройках VSC.

    • @SergeiCalabonga
      @SergeiCalabonga  3 роки тому

      Что вы имеете в виду? Visual Studio Code?

    • @ИгорьСтепанов-ъ7ц
      @ИгорьСтепанов-ъ7ц 3 роки тому

      @@SergeiCalabonga Да, верно. Если точнее, то имел ввиду просто Visual Studio.

    • @SergeiCalabonga
      @SergeiCalabonga  3 роки тому

      @@ИгорьСтепанов-ъ7ц хорошая тема. Сделаю как-нибудь видео обзор. Спасибо.

  • @onavaspamaia7889
    @onavaspamaia7889 3 роки тому +1

    Спасибо за видео, столкнулся с проблемой: в LocalStorage данные записываются, но авторизация в CustomAuthStateProvider не проходит. Делаю под Blazor Server. В чем может быть дело?

    • @SergeiCalabonga
      @SergeiCalabonga  3 роки тому

      Спасибо за комментарий. А вот помочь с проблемой без заглядывания в код у меня вряд ли получится.

    • @nothingextrachannel
      @nothingextrachannel Рік тому

      1 в 1 под Blazor Server такая же проблема

    • @nothingextrachannel
      @nothingextrachannel Рік тому

      Решил ли ты год назад эту проблему ?

  • @leonidkaruna2744
    @leonidkaruna2744 2 роки тому +1

    Добрый день, на 35 минуте по видео, получаю ошибку: InvalidOperationException: JavaScript interop calls cannot be issued at this time. This is because the component is being statically rendered. When prerendering is enabled, JavaScript interop calls can only be performed during the OnAfterRenderAsync lifecycle method.
    Понимаю что имеется в виду, но нет понятия как исправить. Связанна ли ошибка в типе приложения, так как я пишу на Blazor Server.

    • @SergeiCalabonga
      @SergeiCalabonga  2 роки тому

      Обращение к JsRuntime должно быть в метода OnAfterRenderAsync

    • @leonidkaruna2744
      @leonidkaruna2744 2 роки тому

      @@SergeiCalabonga ошибка генерируется в строке var token = await localStorageService.GetAsync(nameof(SecurityToken));, в методе GetAuthenticationStateAsync. Майкрософт говорит: можно безопасно запустить код взаимодействия только в методе жизненного цикла OnAfterRenderAsync. Но логика работы с токеном прописана в вашем методе.

    • @SergeiCalabonga
      @SergeiCalabonga  2 роки тому

      @@leonidkaruna2744 Очень тяжело в памяти компилировать код, который я не вижу
      Видимо, единственное, чем я смогу вам помочь - предложить консультацию он-лайн, на которой вы покажете код и мы попробуем вместе найти решение.

    • @leonidkaruna2744
      @leonidkaruna2744 2 роки тому

      @@SergeiCalabonga Хорошо, попробую объяснить. Вот сам метод целиком:

    • @leonidkaruna2744
      @leonidkaruna2744 2 роки тому

      public override async Task GetAuthenticationStateAsync()
      {
      AuthenticationState CreateAnonymus()
      {
      var anonymusIdentity = new ClaimsIdentity();
      var anonymusPrincipal = new ClaimsPrincipal(anonymusIdentity);
      return new AuthenticationState(anonymusPrincipal);
      }
      var token = await localStorageService.GetAsync(nameof(SecurityToken));
      //если токена нет, возвращаем анонимного пользователя (не авторизованный)
      if (token is null)
      {
      return CreateAnonymus();
      }
      //если содержимое токена пустое или просрочено, возвращаем анонимного пользователя (не авторизованный)
      if (string.IsNullOrEmpty(token.AccessToken) || token.ExpiredAt > DateTime.UtcNow)
      {
      return CreateAnonymus();
      }
      //Claims создают для управления приложением
      var claims = new List
      {
      new Claim(ClaimTypes.Country,"Ukrain"),
      new Claim(ClaimTypes.Name,token.UserName),
      new Claim(ClaimTypes.Expiration,token.ExpiredAt.ToString()),
      new Claim(ClaimTypes.Role,"Administrator"),
      new Claim("Blazor","Rules"),
      };
      //Тут доделать проверку на логин пользователя, существует ли такой и т.д. (пока без проверки)
      var Identity = new ClaimsIdentity(claims, "Token");
      var Principal = new ClaimsPrincipal(Identity);
      return new AuthenticationState(Principal);
      }

  • @ТестТест-в3ъ
    @ТестТест-в3ъ 2 роки тому

    Погодите, мы храним токен в клиенте выходит? А что мешает ему изменить expiredDate?

    • @SergeiCalabonga
      @SergeiCalabonga  2 роки тому +1

      Измениться хэш, токен станет недействительным

    • @ТестТест-в3ъ
      @ТестТест-в3ъ 2 роки тому

      @@SergeiCalabonga спасибо

  • @vitaliiwork884
    @vitaliiwork884 2 роки тому

    Подскажите как получить данные из LocalStorage из Blazor Server-Side App. Сделал все как у вас в ролике и получит ошибку при обращении к LocalStarage:
    InvalidOperationException: JavaScript interop calls cannot be issued at this time. This is because the component is being statically rendered. When prerendering is enabled, JavaScript interop calls can only be performed during the OnAfterRenderAsync lifecycle method.

    • @SergeiCalabonga
      @SergeiCalabonga  2 роки тому

      Прям в тексте ошибки и есть подсказка. Обращение к localStorage можно делать в определённый момент.

    • @vitaliiwork884
      @vitaliiwork884 2 роки тому

      @@SergeiCalabonga Каким способом вы проверяете внутри компонента на состояние PreRendering/AfterRendering?

    • @SergeiCalabonga
      @SergeiCalabonga  2 роки тому

      @@vitaliiwork884 Не помню, чтобы я как-то проверял. На самом деле проверяет сам Blazor и говорит, что вы что-то пытаетесь запустить из JavaScript в тот момент пока он еще не инициализирован. От того и упоминание про OnAfterRenderAsync, потому что, видимо, то что вы делаете, надо делать в этом методе.

    • @vitaliiwork884
      @vitaliiwork884 2 роки тому

      ​@@SergeiCalabonga Запись в LocalStorage происходит в методе GetAuthenticationStateAsync в сервисе AuthenticationStateProvider. Это метод вызывает сам Blazor когда рендерит компонент на сколько я понял. Ну в общем я немного сколхозил и добавил конструкцию try/catch на чтение из LocalStorage. Но мне не нравится такой костыль. А как правильно сделать не знаю.

    • @SergeiCalabonga
      @SergeiCalabonga  2 роки тому +1

      Работает? Ничего не меняй! 🤭

  • @ИгорьСтепанов-ъ7ц
    @ИгорьСтепанов-ъ7ц 3 роки тому

    На сколько я понял на 20:49 ua-cam.com/video/wPs39ZrEPQE/v-deo.html решарпером разбросан. Можно показать как рефакторинг сделать, если не сложно?

    • @SergeiCalabonga
      @SergeiCalabonga  3 роки тому

      Там чисто механическая работа. Просто все классы раскидываются по файлам с таким же как класс названиями.

  • @dannycyberwalker
    @dannycyberwalker 4 роки тому

    14:02 что за плагин?

    • @SergeiCalabonga
      @SergeiCalabonga  4 роки тому

      Где?

    • @dannycyberwalker
      @dannycyberwalker 4 роки тому +1

      @@SergeiCalabonga для создания файлов.

    • @SergeiCalabonga
      @SergeiCalabonga  4 роки тому

      @@dannycyberwalker это не плагин, это полноценная программа Camtasia

    • @dannycyberwalker
      @dannycyberwalker 4 роки тому

      @@SergeiCalabonga спасибо

    • @arkadii_kuznetsov
      @arkadii_kuznetsov 4 роки тому +2

      Расширение Add New File
      marketplace.visualstudio.com/items?itemName=MadsKristensen.AddNewFile

  • @maloun4726
    @maloun4726 2 роки тому

    блен, 2 дня маялся с VS22 на которой у меня никак не вставал дебагер, пробовал делать урок без дебагера, чуть умом не тронулся, в итоге поставил JetBrains Rider на котором всё запстилось, и за 1,5 часа собрал всё тоже что было в ролике на aspnetcore 7

  • @LonDevOfficial
    @LonDevOfficial 5 місяців тому

    WebAssembly 😢
    Кажется мне немного не повезло

    • @SergeiCalabonga
      @SergeiCalabonga  5 місяців тому

      Не переживайте! Это не последний раз, когда вам не повезло!

  • @ЕвгенийИванов-щ7б3п

    Если произношение можно простить, сославшись на изучение немецкого/французского вместо английского, то отсутвие терминологии и некоторые фразы в виде "штука", " какашки" отбивают желание досматривать до конца

  • @Андрэй-л1ь
    @Андрэй-л1ь 7 місяців тому

    инстолл