不需要Javascript的身份验证?

时间:2014-03-26 00:28:54

标签: rest asp.net-web-api

我有一个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中找到一种强制授权标头的方法,但我甚至不确定它是否可行。

1 个答案:

答案 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,它传递了一个我可以识别用户的电子邮件地址。