如何在 Blazor WASM 项目中针对不同类型的客户端(用户/通行证和客户端/秘密)组合多种身份验证方案?

2024-01-04

我有一个带有 Blazor 客户端和 ASP.NET Core 服务器的 Blazor WASM 项目。我可以使用以下代码对用户/密码进行身份验证:

services
    .AddDefaultIdentity<ApplicationUser>(
        options => options.SignIn.RequireConfirmedAccount = true)
    .AddRoles<IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

services
    .AddIdentityServer()
    .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();

services
    .AddAuthentication()
    .AddIdentityServerJwt();

services.AddTransient<IProfileService, ProfileService>();

services.AddAuthorization(options =>
{
    options.AddPolicy("ApiScope", policy =>
    {
        policy.RequireAuthenticatedUser();
        policy.RequireClaim("scope", "api1");
    });
});

当我添加以下代码时,我可以从控制台客户端成功使用 clientcredentials 进行身份验证。但随后 Blazor 客户端用户/密码身份验证将停止工作。

...

services
    .AddIdentityServer()
    .AddApiAuthorization<ApplicationUser, ApplicationDbContext>()
    +.AddInMemoryApiScopes(Config.ApiScopes)
    +.AddClientStore<ClientStore>()
    +.AddDeveloperSigningCredential();

services
    .AddAuthentication()
    .AddIdentityServerJwt();

+services
+    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
+    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
+    {
+        options.Authority = "https://localhost:44311";
+        options.TokenValidationParameters = new TokenValidationParameters
+        {
+            ValidateAudience = false,
+        };
+    });

...

在浏览器中尝试在 Blazor 客户端中进行身份验证时,控制台会打印:

info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
      Authorization failed. These requirements were not met:
      DenyAnonymousAuthorizationRequirement: Requires an authenticated user.

我已经尝试了很多,但无法使两者一起工作。不知何故,此配置似乎需要对所有内容进行身份验证,甚至是标记为“AllowAnonymous”的页面/控制器。因此,当我尝试进行身份验证时,它会给出一个错误,告诉我必须对用户进行身份验证:DenyAnonymousAuthorizationRequirement。策略“ApiScope”仅适用于 clientcredentials 客户端,不适用于 Blazor 客户端。如果删除, RequireAuthenticatedUser 调用不会产生任何影响,同样的错误。

任何帮助表示赞赏。


None

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

如何在 Blazor WASM 项目中针对不同类型的客户端(用户/通行证和客户端/秘密)组合多种身份验证方案? 的相关文章

随机推荐

  • 核心数据关系可以有属性吗

    我正在将 MySQL 数据库移植到 Mac OS 应用程序的 Core Data 我的数据库中有两个多对多表 除了包含外键之外 还有一些数据列 是否可以向核心数据中的多对多关系添加属性 对我来说看起来不像 我的后备方法是复制核心数据中的链接
  • 选择每组中具有最大值的行

    在每个主题都有多个观察值的数据集中 对于每个主题 我想选择具有最大值 pt 的行 例如 使用以下数据集 ID lt c 1 1 1 2 2 2 2 3 3 Value lt c 2 3 5 2 5 8 17 3 5 Event lt c 1
  • 当变量调用别名时如何调用别名

    我添加了一个别名 alias anyalias echo kallel 如果我执行 anyalias kallel 它执行echo命令没有任何问题 现在 如果我以这种方式定义一个变量 var anyalias 然后用这样的方式执行 var
  • 是否有更简单的方法使用 ActiveAdmin 创建/选择相关数据?

    假设我有以下模型 class Translation lt ActiveRecord Base has many localizations end class Localization lt ActiveRecord Base belon
  • 访问 Linkedin 私人可播放流的权限 - 500 或 403 错误

    我在使用 Linked In API V2 时遇到了下一个问题 curl X GET header Accet application json header Authorization Bearer
  • 获取iframe的内容

    我正在尝试获取的内容从另一页 另一个页面是另一个网站 我登录了该网站 获取其内容并将其存储在 我如何获取其中的内容进入当前窗口 简短的回答 你做不到 浏览器使用以下限制限制来自不同网站的内容之间的交互同源政策 http en wikiped
  • 如何在flutter中为image.asset添加onClick?

    我在单击时使用了三个图像 这些图像将导航到其他页面 那么我应该如何在这些图像上使用 onClick 我的代码如下 Row children Expanded child Column children
  • 将 spin.js 微调器插入 div 中?

    刚刚发现 spin js 它似乎是一个救星 问题是如何将微调器插入到我的 div 中 我有一个关注按钮 单击该按钮时 我会删除背景图像并当前替换为 loader gif 我怎样才能用 spin js 做同样的事情 我举了一个 jsfiddl
  • ::-ms-thumb 出现在 MS Edge 中的轨道后面

    我创建了一个滑块 In chrome everything is working fine See image below But in MS Edge thumb appears behind track See image below
  • 无法销毁 codeigniter 中的会话

    我想要实现的是一个简单的登录页面 如果用户登录成功 则重定向到主页 否则保留登录页面 我有 1 个名为login 和 1 个型号名为main 当用户单击登录按钮时 将调用login login send
  • 从大字典中替换 DataFrame 中的值的更好方法

    我编写了一些代码 使用字典将 DataFrame 中的值替换为另一个帧中的值 并且它正在工作 但我在一些大文件上使用它 其中字典可能会变得很长 几千双 当我使用这段代码时 它运行速度非常慢 而且在某些地方还出现了内存不足的情况 我有些确信我
  • Box2D 中的 ChainShape

    最近开始学习libgdx 遇到Box2D的CainShape的问题 我的第一个目标是简单地创建一个带有 ChainShape 的盒子 为了实现这一点 我将四个 Vector2 添加到一个数组中 并使用它们创建一个循环 结果取决于数组中的排列
  • Nunit 运行每个测试两次

    我通过 NUnit 运行测试时遇到问题 我不知道为什么 但每个测试运行两次 问题是 在另一台笔记本电脑上 它通常只运行一次 有没有人遇到同样的问题并且知道如何处理 我有同样的问题 就我而言 我同时拥有Visual Studio 扩展 htt
  • 使用 markdown 时如何正确地将多行 xml 片段粘贴到 github wiki

    我正在尝试为我的项目创建一个 github wiki 但我无法将 Spring beans xml 文件中的片段格式化到此 wiki 中 正确的做法是什么 我尝试使用pre tag code但要么它根本不显示 要么它在同一行中显示所有内容
  • 在 Laravel 5 中间件中获取 cookie

    我正在尝试从 Laravel 5 3 中的中间件检索 cookie 但 request gt cookie language 似乎是空的 我猜它只是在中间件运行后设置的 我在某处读到我应该使用 Cookie queued language
  • Qt父机制

    有一个QPushButton in a QWidget click该按钮应该打开另一个QWidget 如下编码 项目 pro QT core gui greaterThan QT MAJOR VERSION 4 QT widgets TAR
  • C 中函数内的函数[重复]

    这个问题在这里已经有答案了 我正在编写与此类似的代码 include
  • 如何在 APL 中使用排名运算符代替each

    I have dummytxt abcdefghijk texttoadd down rfikv 20 30 50 并需要以下输出 defghijk20down defghijk30down defghijk50down 我可以这样做 sc
  • 在iPhone SDK中设置铃声[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 应用程序如何在 iPhone 上设置铃声 目前 API 不支持此功能 因为它可用于将铃声设置为用户不打算设置的内容 如果您希望添加该功能
  • 如何在 Blazor WASM 项目中针对不同类型的客户端(用户/通行证和客户端/秘密)组合多种身份验证方案?

    我有一个带有 Blazor 客户端和 ASP NET Core 服务器的 Blazor WASM 项目 我可以使用以下代码对用户 密码进行身份验证 services AddDefaultIdentity