从Web API请求图像数据时如何允许发送Cookie

时间:2018-10-25 14:48:46

标签: authentication asp.net-web-api cookies cors asp.net-web-api2

我有一个SPA,我在其中提供给img标签一个图像URL,该URL是Web api端点的URL,以进行身份​​验证并发送重新调整大小的图像。

我在asp.net中使用 OAuth Toke身份验证进行身份验证,但是只要我无法通过Authorization标头发送令牌(因为我必须使用{{ src标签的1}}属性)我正在设置SPA的cookie中的令牌,以在浏览器请求img值(URL)时自动发送。

我遇到的问题是我的SPA位于与Web API所在的域不同的域上,我该怎么做才能允许随img请求一起发送cookie?

我尝试在服务器上设置一些标头,例如:

src

没有任何效果。

最后,我尝试将所有这些标头放入我创建的Access-Control-Allow-Credentials Access-Control-Allow-Origin Access-Control-Allow-Methods Access-Control-Allow-Headers 中,以便可以在请求进入身份验证管道之前捕获请求,然后在其中搜索令牌值并进行设置到ApplicationOAuthBearerAuthenticationProvider并继续前进。

这是我的身份验证提供者:

context.Token

在启动时,我会这样使用它(在 public class ApplicationOAuthBearerAuthenticationProvider : OAuthBearerAuthenticationProvider { public override Task RequestToken(OAuthRequestTokenContext context) { if (context == null) throw new ArgumentNullException("context"); string credsKey = "Access-Control-Allow-Credentials"; if (!context.Response.Headers.Any(a => a.Key.Equals(credsKey))) context.Response.Headers.Add(credsKey, new[] { "true" }); string allowOrigin = "Access-Control-Allow-Origin"; if (!context.Response.Headers.Any(a => a.Key.Equals(allowOrigin))) context.Response.Headers.Add(allowOrigin, new[] { "*" }); string allowMethods = "Access-Control-Allow-Methods"; if (!context.Response.Headers.Any(a => a.Key.Equals(allowMethods))) context.Response.Headers.Add(allowMethods, new[] { "*" }); string allowHeaders = "Access-Control-Allow-Headers"; if (!context.Response.Headers.Any(a => a.Key.Equals(allowHeaders))) context.Response.Headers.Add(allowHeaders, new[] { "*" }); // try to find bearer token in a cookie // (by default OAuthBearerAuthenticationHandler // only checks Authorization header) if (context.Request.Headers.ContainsKey("Authorization")) { context.Token = context.Request.Headers["Authorization"].Replace("Bearer ", string.Empty); } else { var tokenCookie = context.OwinContext.Request.Cookies["ut"]; if (!string.IsNullOrEmpty(tokenCookie)) context.Token = tokenCookie; } return Task.FromResult<object>(null); } } 方法内部):

Configuration

0 个答案:

没有答案