Как авторизовать SPA-приложение Blazor WebAssembly с помощью Identity Server - PullRequest
1 голос
/ 09 марта 2020

Я пишу демонстрационное техническое приложение Blazor WebAssembly SPA, но у меня есть некоторые проблемы с аутентификацией. Я собираюсь использовать Identity Server для авторизации, но я не могу найти библиотек для его поддержки. Все учебные пособия, которые я нашел, содержали руководство по использованию Blazor Server или добавлению ядра ASP. net, но для моего демо-приложения это не имеет смысла.

Я рад, если кто-нибудь может помочь.

Спасибо

1 Ответ

3 голосов
/ 09 марта 2020

12 марта 2020 г.

Чтобы добавить OID C в существующее приложение Blazor WASM с помощью существующего поставщика удостоверений OAuth, прочитайте Защищите ASP. NET Core Blazor WebAssembly с помощью библиотека аутентификации .
Новая Microsoft.AspNetCore.Components.WebAssembly.Authentication поддерживает автоматическое c автоматическое обновление.

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

Посетите theidserver.herokuapp.com / для полный функциональный образец.

dotnet add package Microsoft.AspNetCore.Components.WebAssembly.Authentication::3.2.0-preview2.20160.5
  • Добавить AuthenticationService. js в индекс. html
<!DOCTYPE html>
<html>
<head>
...
</head>
<body>
    <app>Loading...</app>
...
    <script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"></script>
    <script src="_framework/blazor.webassembly.js"></script>
</body>

</html>
  • Добавить файл oid c. json в папку приложения wwwroot с этой структурой
{
  "authority": "https://myidp.com", // Uri to your IDP server
  "client_id": "myclientid", // Your client id
  "redirect_uri": "https://localhost:44333/authentication/login-callback", // Uri to the application login callback
  "post_logout_redirect_uri": "https://localhost:44333/authentication/logout-callback", // Uri to the application logout callback
  "response_type": "code", // OAuth flow response type. For `authorization_code` flow the response type is 'code'. For `implicit` flow, the response type is 'id_token token'
  "scope": "BlazorIdentityServer.ServerAPI openid profile" // list of scope your application wants
}
  • Сконфигурируйте авторизацию Api для чтения конфигурации из вашего oid c. json файл
    Обновите свой Program.cs быть:
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.DependencyInjection;
using System.Threading.Tasks;

namespace BlazorIdentityServer.Client
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = WebAssemblyHostBuilder.CreateDefault(args);
            builder.RootComponents.Add<App>("app");

            builder.Services.AddBaseAddressHttpClient();
            builder.Services.AddApiAuthorization(options => options.ProviderOptions.ConfigurationEndpoint = "oidc.json");

            await builder.Build().RunAsync();
        }
    }
}

11 марта 2020 г.

3.2.0-preview2 предоставляет способ использования Blazor Wasm с IdentityServer
Читать

9 марта 2020 г.

На данный момент существует несколько блистательных OID C lib, которые вы можете использовать, но ни один из них не сертифицирован и не внедрен. все функции.

Если вам интересно, я напишите мой собственный для поддержки автоматического обновления токена, но он еще не закончен, и я застрял в этой проблеме: [wasm] WasmHttpMessageHandler, укажите параметры извлечения для сообщения .
Проблема устранена При этом еще не слил PR . Так что придется подождать или реализовать свой собственный WasmHttpMessageHandler.

Второй подход - обернуть oid c. js, используя JS interop

...