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
。我根据我在localhost网页上看到的内容成功进行了身份验证。
必须采取哪些措施来填充/访问身份Name
?
答案 0 :(得分: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帖子开始)。
希望这能让你滚动。