【问题标题】:Why is SignalR Context.User.Identity.Name empty?为什么 SignalR Context.User.Identity.Name 为空?
【发布时间】:2018-06-25 14:48:09
【问题描述】:

This question 帮助我修复了一个空的 Context.User 值,但修复后,Context.User.Identity.Name 为空。

这是我在 Context.User.Identity 的即时窗口中看到的内容:

{System.Security.Principal.WindowsIdentity}
    AccessToken: {Microsoft.Win32.SafeHandles.SafeAccessTokenHandle}
    Actor: null
    AuthenticationType: ""
    BootstrapContext: null
    Claims: {System.Security.Principal.WindowsIdentity.<get_Claims>d__95}
    CustomSerializationData: null
    DeviceClaims: Count = 0
    Groups: null
    ImpersonationLevel: Anonymous
    IsAnonymous: true
    IsAuthenticated: false
    IsGuest: false
    IsSystem: false
    Label: null
    Name: ""
    NameClaimType: "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"
    Owner: null
    RoleClaimType: "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid"
    Token: {0}
    User: null
    UserClaims: Count = 0

我怀疑 IsAuthenticated: false 与它有关,但我的身份验证是在 SalesForce 包装器中处理的,而不是通过典型的 FormsAuthentication.SetAuthCookie() 代码 - 我搜索了我的存储库,我们不使用 SetAuthCookie任何地方。根据我在本地主机网页中看到的内容,我已成功通过身份验证。

必须做些什么来填充/​​访问身份Name

【问题讨论】:

    标签: c# asp.net asp.net-mvc signalr signalr-hub


    【解决方案1】:

    我认为您对 IsAuthenticated 属性的怀疑是正确的。如果您在没有任何类型的令牌 (OAuth/JWT)、cookie、Windows 身份验证等的情况下调用集线器(或 Web API),则不会填充声明/身份信息。 Here's SignalR 集线器身份验证/授权概述。我已成功使用 Signalr 集线器上的授权过滤器(包含在 Microsoft.AspNet.SignalR 中的过滤器)以及调用中传入的 Bearer 令牌:

     var connection = new HubConnection("http://localhost:50042/signalr");
     connection.Headers.Add("Authorization", "Bearer " + token);
    

    授权过滤器很早就在 Web api 管道中被调用。令牌将被解密并设置线程原则/身份。但是,这个令牌是由我的 web api 发出的,所以它可以被解析。

    我没有任何 Salesforce 经验,但是,听起来您的应用程序设置与我最近所做的有点不同。我假设您的应用程序正在针对 SalesForce API 进行身份验证。然后,必须使用从 Salesforce 返回的该令牌来验证/授权调用,以防止对 Salesforce API 的后续调用。但是,您无法解密/解析该令牌以提取声明(希望如此。否则这不好)。

    您是否尝试过使用 Salesforce 的 JWT(请参阅 here)?还是使用 Web API,利用外部身份验证(例如 here)?您可能可以在您的客户端和我假设托管信号器集线器的 .NET Web Api 之间来回传递 JWT,并使用自定义授权过滤器来解析 JWT 令牌以授权对集线器的调用/设置身份(请参阅this stackoverflow 帖子开始)。

    希望这能让你继续前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多