我有一个Web API应用程序,因此初始化:
app.UseCookieAuthentication();
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.UseOAuthBearerTokens(OAuthOptions);
app.UseGoogleAuthentication();
对于大多数控制器的呼叫,它运行良好。但是,在进行客户端服务调用之前,它还需要一些javascript:
function getSecurityHeaders() {
var accessToken = sessionStorage["accessToken"] || localStorage["accessToken"];
if (accessToken) {
return { "Authorization": "Bearer " + accessToken };
}
return {};
}
问题是我们有一种特定类型的控制器(访问文件的控制器),在调用期间不能运行javascript。例如,呼叫可能是:
http://mysite/mycontroller/file/filename.jpg
...其中值被指定为img标记的src属性。调用有效,但Thread.CurrentPrincipal.Identity未使用空名称进行身份验证,因此目前无法强制实施安全性。
我是Web API的新手,所以这可能是一个愚蠢的问题,但是这有什么办法呢?我需要切换到哪些开关不需要javascript来添加安全标头?我正在考虑尝试在IAuthorizationFilter中找到一种强制授权标头的方法,但我甚至不确定它是否可行。
答案 0 :(得分:1)
所以我想出了解决问题的方法。
首先,我需要将应用程序配置为使用身份验证类型的外部cookie:
//the line below is the one I needed to change
app.UseCookieAuthentication(AuthenticationType = DefaultAuthenticationTypes.ExternalCookie);
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.UseOAuthBearerTokens(OAuthOptions);
app.UseGoogleAuthentication();
其次,事实证明我的WebApiConfig文件中有一行代码禁用了读取外部cookie:
//this line needed to be removed
//config.SuppressDefaultHostAuthentication();
之后,我可以看到来自Google的外部cookie,它传递了一个我可以识别用户的电子邮件地址。