Доступ к RouteData в Blazor на стороне клиента AuthorizationHandler - PullRequest
0 голосов
/ 21 февраля 2020

В настоящее время я узнаю о клиентской стороне Blazor (WebAssembly) и, просматривая авторизацию, пытаюсь проверить, есть ли у пользователя доступ к пути в URI.

Учитывая URI, например http://localhost: 1234 / {route} / resource

На странице я могу сопоставить маршрут со свойством, но как я могу получить доступ к этому значению в AuthorizationHandler, чтобы проверить, что JWT имеет претензию с это значение?

Я пытался внедрить RouteData и пытался получить доступ к HttpContext через IHttpContextAccessor, но это ноль.

Это класс, который я пытаюсь заставить работать

public class RouteDataAccessor : IRouteDataAccessor
{
    private readonly RouteData _routeData;
    public RouteDataAccessor(IHttpContextAccessor httpContextAccessor)
    {
        httpContextAccessor.NullCheck(nameof(httpContextAccessor));
        httpContextAccessor.HttpContext.NullCheck(nameof(httpContextAccessor.HttpContext));

        _routeData = httpContextAccessor.HttpContext.GetRouteData();
    }

    public bool TryGetData(string key, out string value)
    {
        value = null;
        if (_routeData == null || !_routeData.Values.TryGetValue(key, out value))
        {
            return false;
        }

        return true;
    }
}

1 Ответ

1 голос
/ 21 февраля 2020

Прежде всего, вы не можете использовать HttpContext в приложении WebAssembly Blazor или в приложении Server Blazor. Следующая ссылка на мой ответ научит вас, как
передать значение вашему AuthorizationHandler. Кроме того, он иллюстрирует использование компонента AuthorizeView для защиты вашего контента и предоставления доступа только авторизованным пользователям.

Затем посмотрите этот ответ , чтобы получить представление о том, как сохранить токен Jwt в локальном хранилище, как его получить и как использовать его для выполнения HTTP-вызовов.

Примечание: здесь отсутствует способ извлечь заявку из вашего токена Jwt и передать ее вашему AuthorizationHandler. Это заслуживает нового вопроса ...

Вам также необходимо реализовать StateAuthenticationProvider, который может быть объединен с механизмом токена Jwt, который показан в моем ответе (я называю это TokenProvider)

Из чего Вы описываете в своем вопросе, у меня создается впечатление, что каждая вещь для вас нова, поэтому я бы посоветовал вам начать здесь ...

надеюсь, это поможет ...

...