猿问

AspNet.Core、IdentityServer 4:

我有两个 aspnet.core 服务。一种用于 IdentityServer 4,一种用于 Angular4+ 客户端使用的 API。SignalR 集线器在 API 上运行。整个解决方案在 docker 上运行,但这应该无关紧要(见下文)。


我使用了完美无缺的隐式身份验证流程。NG 应用程序重定向到用户登录的 IdentityServer 的登录页面。之后,浏览器将使用访问令牌重定向回 NG 应用程序。然后使用令牌调用 API 并建立与 SignalR 的通信。我想我已经阅读了所有可用的内容(请参阅下面的来源)。


由于 SignalR 使用不支持标头的 websocket,因此应在查询字符串中发送令牌。然后在 API 端,令牌被提取并设置为请求,就像它在标头中一样。然后验证令牌并授权用户。


API 工作没有任何问题,用户获得授权,并且可以在 API 端检索声明。因此 IdentityServer 应该没有问题,因为 SignalR 不需要任何特殊配置。我对吗?


当我不在 SignalR 集线器上使用 [Authorized] 属性时,握手成功。这就是为什么我认为我使用的 docker 基础设施和反向代理没有任何问题(代理设置为启用 websockets)。


因此,未经授权 SignalR 可以工作。通过授权,NG 客户端在握手期间获得以下响应:


Failed to load resource: the server responded with a status of 401

Error: Failed to complete negotiation with the server: Error

Error: Failed to start the connection: Error

请求是


Request URL: https://publicapi.localhost/context/negotiate?signalr_token=eyJhbGciOiJSUz... (token is truncated for simplicity)

Request Method: POST

Status Code: 401 

Remote Address: 127.0.0.1:443

Referrer Policy: no-referrer-when-downgrade

我得到的回应:


access-control-allow-credentials: true

access-control-allow-origin: http://localhost:4200

content-length: 0

date: Fri, 01 Jun 2018 09:00:41 GMT

server: nginx/1.13.10

status: 401

vary: Origin

www-authenticate: Bearer

根据日志,令牌验证成功。我可以包含完整的日志,但我怀疑问题出在哪里。因此,我将在此处包含该部分:


[09:00:41:0561 Debug] Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler AuthenticationScheme: Identity.Application was not authenticated.

[09:00:41:0564 Debug] Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler AuthenticationScheme: Identity.Application was not authenticated.

我在日志文件中得到了这些,但我不确定这意味着什么。我将代码部分包含在 API 中,我在其中获取和提取令牌以及身份验证配置。


系统中没有其他错误、异常。我可以调试应用程序,一切似乎都很好。


包含的日志行是什么意思?如何调试授权期间发生的事情?


Helenr
浏览 406回答 3
3回答
随时随地看视频慕课网APP
我要回答