我有兩個 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 401Error: Failed to complete negotiation with the server: ErrorError: Failed to start the connection: Error請求是Request URL: https://publicapi.localhost/context/negotiate?signalr_token=eyJhbGciOiJSUz... (token is truncated for simplicity)Request Method: POSTStatus Code: 401 Remote Address: 127.0.0.1:443Referrer Policy: no-referrer-when-downgrade我得到的回應:access-control-allow-credentials: trueaccess-control-allow-origin: http://localhost:4200content-length: 0date: Fri, 01 Jun 2018 09:00:41 GMTserver: nginx/1.13.10status: 401vary: Originwww-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 中,我在其中獲取和提取令牌以及身份驗證配置。系統中沒有其他錯誤、異常。我可以調試應用程序,一切似乎都很好。包含的日志行是什么意思?如何調試授權期間發生的事情?
- 3 回答
- 0 關注
- 424 瀏覽
添加回答
舉報
0/150
提交
取消