Ash*_*ala 0 javascript c# cookies asp.net-web-api angularjs
我有一个登录服务,当我登录时,它将用户登录信息传递给我的应用程序.这将在成功登录时调用我的应用程序的第一页.用户信息作为此请求中cookie的一部分传递.
我正在尝试使用以下代码在我的Web API请求中从请求中读取这些cookie.
CookieHeaderValue getAccessUserInfo = request.Headers.GetCookies("GAUSERINFO").FirstOrDefault();
if (getAccessUserInfo != null)
{
userInfo = getAccessUserInfo["GAUSERINFO"].Values.Get("corporate_id");
Logger.Info(string.Format("User Cookie {0}", userInfo));
return userInfo;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我试图从javascript或角度js读取相同的cookie,我无法在集合中看到该cookie.下面是我用来读取角度js中的cookie的代码.
console.log($document[0].cookie);
Run Code Online (Sandbox Code Playgroud)
这是我可以从结果中看到的cookie.我期待的cookie是GAUSERINFO以及下面的cookie.
有没有办法从角度js或请求正文的至少传递读取这些cookie,以便我可以使用C#代码读取我的API中的cookie.
出于安全原因,JavaScript无法访问仅限HTTP的Cookie.为了防止XSS攻击,通常用户会话/登录信息应该只是HTTP.如果攻击者要获取用户的会话信息,他们可以冒充用户.如果要将用户信息公开corporate_id给客户端,则可以将其标记为未标记为HttpOnly的单独cookie.
来自MSDN for HttpCookie.HttpOnly:
被盗cookie可以包含识别站点用户的敏感信息,例如ASP.NET会话ID或表单身份验证票证,并且可以被攻击者重播以伪装成用户或获取敏感信息.当兼容的浏览器收到HttpOnly cookie时,客户端脚本无法访问它.
要使用corporate_id客户端,请创建一个单独的cookie,其中包含客户端所需的唯一信息,当您在C#代码中创建它时,请务必设置HttpOnly为false.
编辑:如果你的用例是使用Angular的$ http服务将cookie转发到你的API,那么你可以为它做一些额外的配置,详见答案:https://stackoverflow.com/a/17065576/6950124
总结一下,您需要设置$httpProvider.defaults.withCredentials = true;并可能还将Web服务器配置为Access-Control-Allow-Credentials: true在浏览器最初请求页面时发回标头.这使浏览器知道您的JavaScript代码可以部分访问HttpOnly cookie.
如果您正确配置了所有内容,则用于进行AJAX调用的基础浏览器代码应转发HttpOnly cookie.
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |