Umbraco Web API - Cookie身份验证

时间:2017-03-28 10:17:48

标签: c# asp.net-web-api2 asp.net-identity owin umbraco7

我正在使用带有OWIN启动类的Umbraco 7.5。

尽管使用cookie auth存在缺点,但我试图在MVC和Web API之间共享cookie auth。

我在我的OWIN启动课中有这个:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.bananasandpajamas.pilloclock"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1' <---- THIS ONE
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    //compile 'com.google.firebase:firebase-core:10.2.1'
    //compile 'com.google.firebase:firebase-auth:10.2.1'
    //compile 'com.google.android.gms:play-services-auth:10.2.1'
    compile 'com.firebaseui:firebase-ui-auth:1.2.0'

}
apply plugin: 'com.google.gms.google-services'

这对Umbraco&amp; amp;关注自定义MVC页面 - 当前用户身份可用,Umbraco帮助程序方法按预期工作。

但是对于Web API控制器 - 无论是从UmbracoApiController派生还是仅从ApiController派生,HTTP上下文中的当前用户身份始终为null。我已经检查了发送给API控制器的浏览器请求,并且包含了ASPNET身份cookie,所以我很困惑为什么这不会转换为线程上的用户身份。 HttpContext的。有人能够对此有所了解吗?

  

编辑:关于此的更多信息 - 我尝试创建自己的自定义cookie   身份验证中间件并取代了标准MS   CookieAuthenticationHandler与我的自定义实现让我   可以通过它跟踪呼叫。有趣的是,对于正常的MVC   页面,在页面加载时调用AuthenticateCoreAsync方法,   它成功读取cookie并返回有效的身份验证   票。对于Web API调用,AuthenticateCoreAsync方法不是   在API方法被命中之前完全被调用。

1 个答案:

答案 0 :(得分:0)

我找到了答案 - 它与OWIN无关,而且与我的Web API初始化代码有关。我将自托管Web API所需的代码与作为MVC应用程序的一部分运行Web API所需的代码混合在一起。而不是IAppBuilder.UseWebApi()我应该使用GlobalConfiguration.Configure()

所以工作代码看起来像这样:

public static void Configure(IAppBuilder app)
{
    GlobalConfiguration.Configure(Register);
}

private static void Register(HttpConfiguration config)
{
    ConfigureHttpRoutes(config);

    ConfigureFormatters(config);

    //etc...
}

this SO question中遇到了类似的问题。