小编Bru*_*lin的帖子

SignalR 的 JWT 身份验证失败

我有一个 REST API(核心 2.1),它需要支持 SPA,使用 SignalR 提供安静的端点和一些实时交互功能;

Hub/MVC 路由在同一台服务器上运行,该服务器也是 JWT 令牌的提供者。

登录后,客户端会收到一个 JWT 令牌,该令牌放置在每个 REST 请求的标头上,否则会收到 401(这是与[Authorize]属性一起使用的)。

在客户端,下面的代码尝试连接到我的 /hub 端点: new HubConnectionBuilder().withUrl(HUB_URL, { accessTokenFactory: () => this.getToken() })
如果我放置[Authorize]在我的 Hub 类中,我会收到以下错误(未经授权,客户端可以正确发送和收听):

WebSocket 连接到 'wss://localhost:5001/hub?id=MY_ID&access_token=MY_TOKEN' 失败:HTTP 身份验证失败;没有可用的有效凭据

服务器记录了失败的身份验证:

(在 AddJwtBearerOptions.Events.OnMessageReceived 上触发 console.log)
信息:Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
请求开始 HTTP/1.1 GET https://localhost:5001/hub?id=MY_ID&access_token=MY_TOKEN
信息:Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
授权失败。
信息:Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[12]
AuthenticationScheme:Bearer 受到挑战。
信息:Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
请求在 0.3658ms 401 内完成

与那些请求不同的是,使用 SAME JWT TOKEN 和 REST 令牌(使用[Authorize]),使用Header: Bearer XXXX而不是查询字符串,触发OnTokenValidated. 将OnAuthenticationFailed永远不会触发,即使验证失败:

(在 …

c# jwt signalr asp.net-core

8
推荐指数
2
解决办法
7001
查看次数

带有警告和 InvalidOperationException 的 WCF WebService

我目前正在尝试将我的 ASP-NET Core 2 应用程序连接到 Magento 的 API (WSDL v2),但不断收到以下错误:
*不管我调用哪个方法,甚至new PortTypeClient().loginAsync(username, password);抛出那个,使用这个随机端点名称salesOrderShipmentAddComment

InvalidOperationException:无法加载操作 'salesOrderShipmentAddComment',因为它在 \"literal\" 模式下指定了 \"rpc-style\",但使用了消息协定类型或 System.ServiceModel.Channels.Message。不允许这种组合 - 为样式指定不同的值或使用消息协定类型或 System.ServiceModel.Channels.Message 以外的参数。

但是,使用 SoapUI、邮递员或使用框架 4.6 导入,它可以完美运行。使用 Magento v1 API 它也可以工作,但我不想使用这个版本。

在 asp-net core 导入期间,我也收到了这些警告(导入 v1 没有显示任何警告): 在此处输入图片说明

我几乎要创建一个新的 4.6 应用程序,单独托管它以作为我的应用程序和 Magento 之间的桥梁,即使它损害了我的性能和架构。

这就是我进行导入的方式: 在此处输入图片说明 *Obs:在 中Data Type Options,我还尝试检查不同的选项,并选择其他数据类型。

任何事情都会有所帮助......
提前致谢

c# wcf magento asp.net-core

5
推荐指数
2
解决办法
1698
查看次数

实体约束“检查”代码优先

我制作了一张表格,将商店与 Table1 或 Table2(和其他信息)相关联

Id
IdStore_FK
IdTable1_FK
IdTable2_FK
SomeOtherFieldsThatDoesntMatterRightNow
Run Code Online (Sandbox Code Playgroud)

我创建了一个检查约束以确保它永远不会同时填充两个 FK,并且必须只填充其中一个(XOR):

ALTER TABLE TABLE0 ADD CHECK ((IdTable1_FK IS NULL AND IdTable2_FK IS NOT NULL) OR (IdTable1_FK IS NOT NULL AND IdTable2_FK IS NULL))
Run Code Online (Sandbox Code Playgroud)

但是我在和之后alter table 手动运行了它。我需要仅使用代码来制定这些限制,以便能够发送给我的经理。add-migrationupdate-database

如何告诉实体框架仅使用我的代码来创建它?
是否有任何 DataAnnotation 可以做到这一点?

我试图modelBuilder.Sql("ALTER TABLE XXX....")Up特定迁移的方法中添加。我只能add-migration创建文件的之后将该行添加到迁移文件中。

每次启动后的种子查询检查约束是否存在,如果不存在则创建它对我来说似乎并不酷。此外,它只会在我运行代码时运行,而不是与迁移/更新数据库一起运行。

.net c# entity-framework .net-core entity-framework-migrations

4
推荐指数
1
解决办法
3872
查看次数