我正在使用带有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方法被命中之前完全被调用。
答案 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中遇到了类似的问题。