如何使用 Identity Server 授权 Blazor WebAssembly SPA 应用

2023-12-26

我正在编写一个演示 Blazor WebAssembly SPA 技术演示应用程序,但我在身份验证方面遇到一些问题。 我将使用 Identity Server 进行授权,但我找不到任何支持它的库。 我发现的所有教程都指导如何使用 Blazor Server 或添加托管的 ASP.net Core,但这对于我的演示应用程序来说并没有多大意义。

如果有人能提供帮助,我很高兴。

谢谢


2020 年 3 月 12 日

要使用现有 OAuth 身份提供商将 OIDC 添加到现有 Blazor WASM 应用程序,请阅读使用身份验证库保护 ASP.NET Core Blazor WebAssembly 独立应用程序 https://learn.microsoft.com/en-us/aspnet/core/security/blazor/webassembly/standalone-with-authentication-library?view=aspnetcore-3.1.
新的Microsoft.AspNetCore.Components.WebAssembly.Authentication https://www.nuget.org/packages/Microsoft.AspNetCore.Components.WebAssembly.Authentication/3.2.0-preview2.20160.5支持自动静默续订。

如果您更喜欢使用配置文件而不是硬编码值,您可以像这样设置应用程序

Visit theidserver.herokuapp.com/ https://theidserver.herokuapp.com/以获得完整功能的示例。

  • 将您的应用程序升级到 3.2.0 Preview 2
    Read 升级现有项目段落 https://devblogs.microsoft.com/aspnet/blazor-webassembly-3-2-0-preview-2-release-now-available/

  • 添加包 Microsoft.AspNetCore.Components.WebAssembly.Authentication

dotnet add package Microsoft.AspNetCore.Components.WebAssembly.Authentication::3.2.0-preview2.20160.5
  • 将 AuthenticationService.js 添加到 index.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>
  • 使用此结构在应用程序的 wwwroot 文件夹中添加 oidc.json 文件
{
  "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 授权以从 oidc.json 文件中读取配置
    更新你的程序.cs to be :
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();
        }
    }
}

2020 年 3 月 11 日

3.2.0-预览版2 https://devblogs.microsoft.com/aspnet/blazor-webassembly-3-2-0-preview-2-release-now-available/提供了一种将 Blazor Wasm 与 IdentityServer 结合使用的方法
Read

  • 使用 Identity Server 保护 ASP.NET Core Blazor WebAssembly 托管应用程序 https://learn.microsoft.com/en-us/aspnet/core/security/blazor/webassembly/hosted-with-identity-server?view=aspnetcore-3.1
  • ASP.NET Core Blazor WebAssembly 附加安全场景 https://learn.microsoft.com/en-us/aspnet/core/security/blazor/webassembly/additional-scenarios?view=aspnetcore-3.1#save-app-state-before-an-authentication-operation

2020 年 3 月 9 日

目前,您可以使用一些 blazor OIDC 库,但没有一个经过认证并实现所有功能。

  • HLSoft.BlazorWebAssembly.Authentication.OpenIdConnect https://github.com/sounj142/HLSoft.BlazorWebAssembly.Authentication.OpenIdConnect
  • Authfix/Blazor-Oidc https://github.com/Authfix/Blazor-Oidc
  • sotsera/sotsera.blazor.oidc https://github.com/sotsera/sotsera.blazor.oidc
  • MV10/BlazorOIDC https://github.com/MV10/BlazorOIDC/tree/master/ClientSite

如果你好奇,我写my own https://github.com/aguacongas/TheIdServer/tree/master/src/Blazor/Aguacongas.Blazor.Oidc支持令牌静默更新,但它尚未完成,我坚持这个问题:[wasm] WasmHttpMessageHandler,为每条消息提供获取选项 https://github.com/mono/mono/issues/17808.
该问题已在此解决尚未合并 PR https://github.com/mono/mono/pull/17932。所以必须等待或实施我自己的WasmHttpMessageHandler.

第二种方法是包裹oidc.js https://github.com/IdentityModel/oidc-client-js using JS 互操作 https://learn.microsoft.com/en-us/aspnet/core/blazor/call-javascript-from-dotnet?view=aspnetcore-3.1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Identity Server 授权 Blazor WebAssembly SPA 应用 的相关文章

随机推荐

  • 如何使用列标题引用 Google Apps 脚本电子表格中的单元格

    我有几个 Google 表格 可以连接并更新它们之间的单元格 现在我必须使用 R1C1 或 A1 类型引用来定义基于特定列的获取或设置单元格 如果添加新列 所有这些引用现在都会关闭 每个工作表的第一行都将列标题作为这些单元格中的值 我可以以
  • Solr 查询唯一整数字段

    我在 schema xml 中定义了一个字段
  • Django Forms clean() 方法 - 需要客户端的 IP 地址

    我正在重写 Django 表单上的 clean 方法 我想要访问客户端的 IP 地址 假设这是绑定表单 如果我有对请求对象的引用 我可以从 META REMOTE ADDR 轻松获取它 但是 我没有参考该请求 关于如何做到这一点有什么想法吗
  • 如何在 Keras 中实现自适应损失?

    我正在尝试使用 Keras 来实现中完成的工作通用的自适应鲁棒损失函数 https arxiv org abs 1701 03077 作者提供了处理困难细节的张量流代码 我只是想在 Keras 中使用他的预构建函数 他的自定义损失函数正在学
  • 是否可以收听“风格改变”事件?

    是否可以在 jQuery 中创建一个可以绑定到任何样式更改的事件侦听器 例如 如果我想在元素更改尺寸或样式属性中的任何其他更改时 执行 某些操作 我可以执行以下操作 div bind style function console log t
  • 将字符串转换为代码

    我想知道是否有任何方法可以转换String为Java可编译代码 我有一个比较表达式保存在数据库字段中 我想从数据库中检索它 然后在条件结构内对其进行评估 有什么办法可以做到这一点吗 如果您使用 Java 6 您可以尝试 Java 编译器 A
  • PHP MySQL 小查询超时,必须将限制设置为 10

    在为相对较小的查询调用 mysql query 时 我收到 PHP 超时错误 因此我必须将限制设置为 10 Fatal error Maximum execution time of 120 seconds exceeded in C xa
  • 角度路由when()无需映射到控制器或模板

    可以使用when 而不映射到任何控制器或模板吗 这就是我配置路线的方式 app config function routeProvider locationProvider locationProvider html5Mode true r
  • 如何在签署 pdf 文件时将时间戳属性添加到认证详细信息

    我想在证书中显示时间戳属性 如图所示 我应该在签名中设置什么 这是我添加标志信息的代码 private SignerInformation signTimeStamp SignerInformation signer throws IOEx
  • python“字符串”模块?

    所以我正在阅读这个旧模块 我认为是 2002 年左右 它有这一行 导入字符串 Python 是否要求您在能够使用字符串类型变量或其他东西之前显式导入字符串模块 我没有看到它在代码中这样使用 string something The stri
  • 天青错误。您没有权限查看该目录或页面

    当我导航到部署的 azure 网站时 出现错误 You do not have permission to view this directory or page 在我的 web config 中
  • 如何生成像github这样的个人访问令牌?

    这是理论问题 我想在 net core webapi 中创建类似 Github 个人访问令牌 的机制 该机制已经与 Identity Server 4 具有 ResourceOwnerPassword 流 理论上 我想根据用户请求手动生成令
  • 用分隔符分割字符串

    我目前正在尝试拆分字符串1128 2这样我就可以有两个不同的值 例如 value1 1128 和 value2 2 这样我就可以单独使用每个值 我努力了split 但没有成功 Grails 是否有特定的方法来处理这个问题 或者有更好的方法
  • 在 UML 中包含或扩展?

    据我所知 扩展关系是当用例是可选的时 但包含是当需要用例的操作时 但不是所有时候 我想为注册系统建模一个用例 但对使用哪种关系有疑问 我有两个可能的选择 我更热衷于 b 表示此操作的方式 因为修改数据和删除数据的部分不应该是可选的 它们用于
  • 如何在Windows中使用启用伪语言环境进行测试?

    Windows Vista引入了三个概念伪语言环境 http msdn microsoft com en us library dd319106 28v vs 85 29 aspx Pseudo Locale Locale Name LCI
  • PhoneGap Build 上的每个平台配置 (config.xml)

    我有一个在 PhoneGap Build 上远程构建的 PhoneGap 3 1 应用程序 在我的应用程序中有一个config xml文件位于项目的根目录下 该文件包含
  • 指向连续二维数组的指针

    我正在使用带标志的 gcc 版本 4 8 0 Wall std gnu99 我需要使用 C 中的 malloc 为连续的二维数组动态分配内存 这个事实是不容谈判的 但是 为了便于使用 我仍然希望能够使用方便的方式访问数组x r c 符号 这
  • 无法在 Select2 下拉列表中选择项目

    我正在开发一个使用 Select2 版本 3 5 1 的应用程序 设置此下拉 自动完成字段的 HTML 如下所示
  • C 中的静态函数

    在 C 中将函数设为静态有什么意义 制作一个函数static对其他翻译单元隐藏它 这有助于提供封装 https en wikipedia org wiki Encapsulation computer programming 助手文件 c
  • 如何使用 Identity Server 授权 Blazor WebAssembly SPA 应用

    我正在编写一个演示 Blazor WebAssembly SPA 技术演示应用程序 但我在身份验证方面遇到一些问题 我将使用 Identity Server 进行授权 但我找不到任何支持它的库 我发现的所有教程都指导如何使用 Blazor