我对OWIN或ASP .NET不是很熟悉,但是我正在构建一个基于MVC模板的站点,并配置了个人用户帐户,我遇到了OWIN cookie中间件的问题。 我正在使用项目模板中提供的默认ApplicationSignInManager ,我还有一些SignalR hub用于实时工作。 现在,在某些情况下,我想登录用户使用SignalR集线器。 这段代码:

Get<ApplicationSignInManager>().PasswordSignInAsync(…)

在控制器操作中工作得很好,因为该操作将导致带有Set-Cookie标头的HTTP响应,该标头.AspNet.ApplicationCookie预期设置.AspNet.ApplicationCookie ,并且进一步的请求将包含它。 由于我从SignalR中心而不是控制器返回一个值,我虽然只是获取cookie并将其设置在hub的客户端方法中,以模拟控制器响应。

但是我似乎无法弄清楚如何找到cookie值。

我已经查看了IOwinContext所有内容,并且无处可找到cookie。 我可以找到登录的ClaimsIdentity就好了,而不是cookie。 我已经做了一些阅读,我认为这就是为什么实际设置cookie的中间件尚未在我看来为cookie的时候执行。 它可能根本就没有执行,因为在集线器中,我甚至不知道我是否在OWIN管道中。 我这样做:

HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>().PasswordSignInAsync()

我试图添加我自己的中间件,如下所示:

app.Use(async (context, next) => { await next; });

但是这个中间件根本没有受到打击,这让我想到通过在SignalR中获取ApplicationSignInManager我正在创建IPrincipal ,是的,但没有其他任何事情发生,即执行cookie中间件,它将设置HTTP响应Set-Cookie标头我在追求。

有没有办法可以解决这个问题并让我的用户登录SignalR然后重新启动客户端上的连接,以便下一个OnConnected调用接收我手动设置的cookie并从中找出正确的IPrincipal 我可以让OWIN管道在集线器中运行吗?

#1楼 票数:4 已采纳

您正确读取它 - 在请求结束并且响应已开始之前,cookie未设置。

无论如何,身份验证cookie总是设置为Http-only - 这意味着JavaScript无法访问该cookie以防止客户端会话劫持。 而你正在尝试通过JavaScript设置auth-cookie - 这就是安全问题。

我会放弃这个想法。 而是通过控制器操作登录用户而不涉及任何JS,然后使用SignalR - 更容易,更安全。

  ask by Tomáš Hübelbauer translate from so

未解决问题?本站智能推荐:

1回复

Owin身份验证不会发出cookie

我在Login控制器中有以下操作。 出于测试目的,我没有在Index操作中使用登录表单。 相反,我创建声明身份并登录。此操作是GET而不是POST。 它创建声明标识并将其用于AuthenticationManager.SignIn 。 但是当我检查浏览器cookie时,我找不到身份验证c
1回复

OWIN安全性 - 如何在保持身份验证承载令牌的同时在cookie中返回刷新令牌

我在基于Web API 2模板的Web服务中设置刷新令牌。 它将由我们自己的网站和外部客户使用。 经过一段时间的研究,关于从XSS攻击中保护刷新令牌的一般建议是将标识符存储在加密的cookie中。 我知道我可以使用UseCookieAuthentication方法而不是UseOAuth
1回复

Owin如何在Application_EndRequest阶段之后设置Asp.Net Identity身份验证cookie?

作为测试,我使用Visual Studio 2013中的最新模板创建了一个全新的Asp.Net MVC5应用程序。我将以下方法添加到Global.asax.cs: 当我启动应用程序并使用注册用户的凭据对/ Account / Login执行POST时,返回给客户端的cookie是:
1回复

OWIN身份验证和“在线用户”

我有一个项目使用集中的ASP.NET MVC网站,该网站正在实现OWIN ASP.NET身份体系结构。 我们的集中网站已被用于: 使用用户名/密码授予令牌 授予刷新令牌 添加/删除和修改用户/角色和声明 通过OAuthentication和社交登录(Twitt
1回复

OWIN身份验证未通过身份验证

我是OWIN身份验证的新手,我正在尝试使(基本)基本功能正常工作。 当我发布到我的登录操作“ _signInManager.PasswordSignInAsync”时,返回成功,但是我的IPrincipal用户似乎没有更新。 另外,如果我执行单独的测试(例如,IE执行userManage
4回复

单声道与Owin身份验证

我有一个我在Mono中运行的Owin应用程序,我正在尝试让身份验证在其上正常运行。 我使用此页面上的信息作为开始。 我很快意识到Owin Authentication使用了一些Windows特定的库。 不过, 这个问题有一个解决方法,我认为这就足够了。 事实并非如此。 以下代码抛出
7回复

从外部身份验证提供程序获取MVC5框架OAuth / OWin身份提供程序的ExtraData

我正在尝试在VS 2013预览中使用新的MVC5框架。 会员身份验证框架已经过大修,并被OWin取代。 特别是,我打开了外部身份验证提供程序Google auth。 这很简单。 只需取消注释此行: app.UseGoogleAuthentication(); 在新的默认
1回复

SignalR和Mono和Owin的自托管跨站点连接问题

我准备好解决这个问题,因为所有指南都显示相同的一两个解决方案,这似乎对除我之外的所有人都适用。 我正在使用Owin在Mono应用程序中使用SignalR。 我在HubConfiguration中设置了EnableCrossDomain = true。 我已经使用javascript建立