У меня есть API, в котором также размещается конечная точка токена OpenIdDict. У API нет веб-страниц с формами входа, но вместо этого он возвращает токен доступа в ответ в результате получения сообщения формы.

Раньше у меня был старый интерфейс AngularJS, который общался с API, чтобы получить токен и сохранить его на клиенте. Angular отвечал за добавление токена к каждому запросу к серверу.

Сейчас я планирую перестроить интерфейс с помощью Blazor Server. Я хочу, чтобы новый клиент / интерфейс Blazor Server использовал интроспекцию в отношении конечной точки токена API.

Мой план состоял в том, чтобы создать настраиваемую страницу входа, которая будет на стороне сервера общаться с API и получать токен доступа, токен обновления и т. Д. Но я понятия не имею, куда потом поместить токен доступа, чтобы он использовался Проявляйте интроспекцию всякий раз, когда я использую атрибут Authorize. Я мог бы просто вернуть токены и, возможно, написать какой-нибудь javascript, который где-то его сохранит и добавит к любым последующим HTTP-запросам, но это не похоже на решение Blazor Server?

Мое последнее открытие заключается в том, что токены могут храниться «в сеансе» на сервере, а на клиенте создается cookie «идентификатор сеанса»? Может быть, здесь совсем нет ...

Когда я экспериментировал с поддержкой Identity в Blazor Server, после успешного входа в систему всегда создавался файл cookie с именем .AspNetCore.Identity.Application.

Другое менее желательное решение или обходной путь, о котором я думал, - это копирование кода настройки OpenIdDict API в проект Blazor Server и направление их в ту же базу данных.

Любая помощь здесь будет принята с благодарностью!

0
Cybrosys 25 Июн 2020 в 14:15

1 ответ

Лучший ответ

Мой план состоял в том, чтобы создать настраиваемую страницу входа, которая будет на стороне сервера общаться с API и получать токен доступа, токен обновления и т. Д. Но я понятия не имею, куда потом поместить токен доступа, чтобы он использовался Проявляйте интроспекцию всякий раз, когда я использую атрибут Authorize. Я мог бы просто вернуть токены и, возможно, написать какой-нибудь javascript, который где-то его сохранит и добавит к любым последующим HTTP-запросам, но это не похоже на решение Blazor Server?

Вы можете хранить токен доступа в локальном хранилище и получать его значение, когда захотите его использовать. Да, это решение Blazor Server. Вот как вы должны это делать.

Когда я экспериментировал с поддержкой Identity в Blazor Server, после успешного входа в систему всегда создавался файл cookie с именем .AspNetCore.Identity.Application.

Это верно. Это заявление или вы здесь задаете вопрос? Во всяком случае, я предполагаю, что этот файл cookie будет автоматически удален по истечении срока его службы. Но в вашем случае вам придется делать это вручную; вам нужно будет написать код, который проверяет, истек ли токен доступа. Если вы этого не сделаете, у вашего приложения будут проблемы при попытке доступа к конечной точке Wep Api. В Blazor также есть компоненты и объекты авторизации, которые будут работать неправильно, если вы не управляете сохраненным токеном доступа, например, AuthorizeView, встроенный в компонент LoginDisplay, будет отображать имя аутентифицированного пользователя (потому что утверждения, которые вы извлекаете из маркер доступа представляет собой данные, из которых AuthenticationSateProvider создает объект AuthenticationState), но проверка действительности маркера доступа не выполняется. Но доступ к вашему веб-API с текущим токеном доступа приведет к исключению, поскольку токен доступа недействителен.

Выше я описал то, что следует объяснить текстом на сотнях страниц. Надеюсь, вы не сильно запутались.

Это лучшее место для вас, чтобы начать расследование. Настройка AuthenticationStateProvider в приложении Blazor Server с аутентификацией токена Jwt.

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

1
enet 25 Июн 2020 в 12:08