signalr - 由于 Azure ADB2C,Blazor Server SignalR 集线器在 StartAsync 上失败
问题描述
为了开始学习 Blazor 和一些更新的技术,我创建了一个 Blazor 服务器应用程序。我跟着微软的集线器聊天教程一起学习。事情很顺利。然后我添加了一些基本的 cookie 身份验证,事情还在继续。然后,我遵循了 Carl Franklin 在 Blazor Train 上关于将应用程序连接到 Azure AD B2C 的教程。它可以工作,除了应用程序的聊天中心部分。该应用程序的所有其他部分都可以正常工作并显示用户的信息。
我几乎可以肯定它"hubconnection"
失败了,因为它没有进行身份验证,因为它没有获得访问令牌。失败发生在await hubConnection.StartAsync();
与错误有关的行上System.Text.Json.JsonReaderException: '<' is an invalid start of a value
。我很确定 HTML 会返回 403 消息或类似的消息。
所以我想我在技术上有两个问题:
如何查看
value
导致HubConnectionBuilder
错误的原因?即使我设置了断点,我也永远看不到导致它阻塞的值是什么。如何将访问令牌传递给 HubConnectionBuilder?
我发现了很多“方法”来做到这一点,这些方法要么已经过时,要么我无法工作:
这就是使用 Cookie 身份验证的方法:
hubConnection = new HubConnectionBuilder()
.WithUrl(
NavigationManager.ToAbsoluteUri("/chathub"),
config => config.UseDefaultCredentials = true)
.Build();
现在看来我需要根据这个关于 Auth 和 SignalR 的 Microsoft 页面传递一个访问令牌,但是
hubConnection = new HubConnectionBuilder()
.WithUrl(
NavigationManager.ToAbsoluteUri("/chathub"), options =>
{
options.AccessTokenProvider = () => Task.FromResult(_myAccessToken);
})
.Build();
这是我在 Startup 中所做的,以根据Carl Franklin YouTube 视频让 B2C 工作
//****Azure B2C****//
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAdB2C"));
services.AddControllersWithViews()
.AddMicrosoftIdentityUI();
services.AddAuthorization(options =>
{
// By default, all incoming requests will be authorized according to the default policy
options.FallbackPolicy = options.DefaultPolicy;
});
services.AddRazorPages();
services.AddServerSideBlazor()
.AddMicrosoftIdentityConsentHandler();
解决方案
推荐阅读
- php - 在使用 wp-graphql 的 register_post_type 之后未添加 Wordpress 自定义帖子类型
- javascript - 单击地图后将变量从模板传递到视图
- c# - 使用 Entity Framework Core 进行读写,无需自发更改实体对象
- javascript - 提交按钮不改变问题
- python - 尝试通过 cmd 升级 pip 没有结果
- vue.js - 在 Vue 身份验证后获取用户名并使用户名反应
- excel - 如果范围是 Nothing 退出 sub、userform、specialcells
- serialization - Django rest 框架:有没有办法在使用序列化程序验证数据之前清理数据?
- logstash - Logstash 配置错误,我认为这是一个愚蠢的问题
- c++ - 有没有办法用忍者生成器在cmake中禁用“deps = gcc”的生成?