Я пытаюсь заставить IdentityServer4 (с локальным API) работать с интерфейсом Blazor (на стороне сервера).
Мне удалось создать серверную часть IdentityServer. Функции входа в систему работают, и он проходит проверку подлинности с помощью настройки удостоверения ASP.NET на бэкэнде. После аутентификации я могу (используя Postman) взять токен на предъявителя и вызвать API, чтобы получить успешные результаты.
Я хочу знать, понял ли кто, как:
- Автоматическое перенаправление Blazor (на стороне сервера) при переходе на страницу, требующую авторизации
- Как только пользователь успешно входит в IdentityServer, как передать эту информацию в context.User приложения Blazor. Если это вообще возможно, я могу ошибиться в терминологии.
Я надеюсь, что в конечном итоге будет принято не просто использование odic-client.js для выполнения этих вызовов. Даже если это результат, можно ли было бы взять эту информацию обратно из IdentityServer и засунуть ее в context.User?
ОБНОВИТЬ:
Мне удалось связать веб-сайт Blazor с прямым доступом к IdentityServer (а не автонадресу, который нужен в №1), чтобы проверить функциональность.
ReturnUrl перенаправляет с IdentityServer (после успешного входа). Также похоже, что он записывает файл cookie AspNetCore.Identity.Application в файлы cookie веб-сайта Blazor.
Есть ли способ получить эту информацию из файла cookie (если он содержит токены пользователя и носителя)?
ОБНОВИТЬ:
Я обнаружил, что похоже, что код Blazor пытается прочитать файл cookie, но я не знаю, как это проверить. Я получаю это на выходе:
Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:Information: AuthenticationScheme: Identity.Application signed in.
Microsoft.EntityFrameworkCore.Database.Command:Information: Executed DbCommand (1ms) [Parameters=[@__normalizedUserName_0='?' (Size = 256)], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [u].[Id], [u].[AccessFailedCount], [u].[ConcurrencyStamp], [u].[Email], [u].[EmailConfirmed], [u].[LockoutEnabled], [u].[LockoutEnd], [u].[NormalizedEmail], [u].[NormalizedUserName], [u].[PasswordHash], [u].[PhoneNumber], [u].[PhoneNumberConfirmed], [u].[SecurityStamp], [u].[TwoFactorEnabled], [u].[UserName]
FROM [AspNetUsers] AS [u]
WHERE [u].[NormalizedUserName] = @__normalizedUserName_0
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action method IdentityServer4.Quickstart.UI.AccountController.Login (BQM.API), returned result Microsoft.AspNetCore.Mvc.RedirectResult in 651.558ms.
Microsoft.AspNetCore.Mvc.Infrastructure.RedirectResultExecutor:Information: Executing RedirectResult, redirecting to https://localhost:44370/.
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action IdentityServer4.Quickstart.UI.AccountController.Login (BQM.API) in 777.6252ms
Microsoft.AspNetCore.Routing.EndpointMiddleware:Information: Executed endpoint 'IdentityServer4.Quickstart.UI.AccountController.Login (BQM.API)'
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 890.8492ms 302
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/1.1 GET https://localhost:44370/
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executing endpoint '/_Host'
Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker: Information: Route matched with {page = "/_Host", area = ""}. Executing page /_Host
Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker: Information: Executing an implicit handler method - ModelState is Valid
Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker: Information: Executed an implicit handler method, returned result Microsoft.AspNetCore.Mvc.RazorPages.PageResult.
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Information: Authorization failed.
Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker: Information: Executed page /_Host in 16.8805ms