技术:ASP.Net Web API 2身份验证。
IDE:我在Visual Studio 2013中使用SPA模板。
故事:我添加了一个带有一个Get方法的控制器(请参见代码)并执行了一个测试,以便打印“ System.Threading.Thread.CurrentPrincipal.Identity.Name”。最终的游戏是找到调用该API的客户端的标识。
问题:为什么身份显示为空?它与调用在不同线程上进行服务的事实有关吗?令牌(客户端在登录时收到的令牌)是否属于请求的一部分并用于身份验证?
为了清楚起见,我尝试将其简短化,因此,如果您需要更多信息,请告诉我。
public class abcController : ApiController
{
// GET api/abc
public IEnumerable<string> Get()
{
return new string[]
{ System.Threading.Thread.CurrentPrincipal.Identity.Name.ToString(),
"My Try"
};
}
好的,我找到了解决方法(不是解决方案)。基本上,删除此行“ config.SuppressDefaultHostAuthentication();”。http://forums.asp.net/p/1944393/5594350.aspx?Re+Web+API+2+how+do+I+find+the+ident+of+an+经过身份验证的用户+
在javascript方面,在webapi调用中,您需要确保在app.datamodel.js中调用其getSecurityHeaders函数,如下所示(当然,他们已经登录):
var getabc = function () {
return $.ajax("api/abc", {
type: "GET",
headers: getSecurityHeaders()
});
};
如果您不调用其getSecurityHeaders()函数,则Identity将为null。
为了完整起见,下面是该函数:
function getSecurityHeaders() {
var accessToken = sessionStorage["accessToken"] || localStorage["accessToken"];
if (accessToken) {
return { "Authorization": "Bearer " + accessToken };
}
return {};
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句