私はOWINスタートアップクラスでUmbraco 7.5を使用しています。Umbraco Web API - Cookie認証
Cookie認証を使用することには欠点がありますが、MVCとWeb APIの間でCookie認証を共有しようとしています。
私は私のOWIN起動クラスでこれを持っている:
private static void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
CookieSecureOption secureCookieOption = CookieSecureOption.SameAsRequest;
#if DEBUG
secureCookieOption = CookieSecureOption.Never;
#endif
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
AuthenticationMode = AuthenticationMode.Active,
LoginPath = new PathString("/Account/Login"),
CookieSecure = secureCookieOption,
CookieManager = new ChunkingCookieManager(),
Provider = new CookieAuthenticationProvider()
}, PipelineStage.Authenticate);
//configure B2C OAuth middleware
foreach (string policy in AppSettings.B2CPolicies)
{
app.UseOpenIdConnectAuthentication(CreateBearerOptionsFromPolicy(policy));
}
// Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
これは限りUmbraco &カスタムMVCページが懸念していると正常に動作します - 現在のユーザーIDが利用可能であり、期待通りUmbracoのヘルパーメソッドが動作します。
しかし、Web APIコントローラの場合、UmbracoApiControllerまたはApiControllerから派生しても、HTTPコンテキストの現在のユーザーIDは常にnullです。私は、APIコントローラのために送信されているブラウザリクエストをチェックしています。なぜなら、これがスレッド& httpcontextのユーザIDに変換されない理由が混乱しています。誰かがそれについて何か光を当てることができる?
編集:私は私自身のカスタムクッキー 認証ミドルウェアを作成しようと、私は それを通じて呼び出しをトレースすることができるように私のカスタム実装で、標準のMS CookieAuthenticationHandlerを置き換えthis-上のいくつかの詳細情報。興味深いことに、通常のMVC ページでは、ページがロードされるとAuthenticateCoreAsyncメソッドが呼び出され、 はCookieを正常に読み取って有効な認証 チケットを返します。 Web API呼び出しでは、APIメソッドがヒットする前にAuthenticateCoreAsyncメソッドが呼び出されていません( )。