14

ASP.NetMVC4コントローラーでServiceStack[Authentication]属性を機能させるのに問題があります。ログインの詳細が正しく送信された後でも、属性を持つページ/アクションメソッドがユーザーをログインページにリダイレクトし続けます。

SocialBootstrapApiの例に従いましたが、違いは、すべての認証Webサービス呼び出しがコントローラーから行われることです。

this.CreateRestClient().Post<RegistrationResponse>("/register", model);

私がこれまでに行ったことの他のこと:

  • AuthUserSessionをサブクラス化する独自のユーザーセッション実装を使用します(例とそれほど違いはありませんが、Userテーブルの独自の実装を使用します)
  • BaseControllerでServiceStackControllerを継承し、デフォルトのログインURLを上書きします
  • ユーザーセッションの実装でAppHostの認証機能を有効にする

登録は機能し、ユーザー認証ロジックは機能し(セッションは持続しませんが)、リクエストにCookiess-idとCookieが表示されます。ss-pid

だから私の質問の完全なリスト:

  1. [Authenticate]属性を機能させるにはどうすればよいですか(または、何を間違えたのですか)。
  2. MVCコントローラーでユーザーセッションを保存して再利用するにはどうすればよいですか?現時点this.UserSessionでは常にnullです。
  3. ユーザーをログアウトするにはどうすればよいですか?this.CreateRestClient().Get<AuthResponse>("/auth/logout");動作しないようです。

更新1:
セッションCookie(ss-idおよびss-pid)は、セキュリティで保護されたページ([Authenticate]属性を持つページ)を読み込もうとすると、資格情報が送信される前に作成されます。これは予想される動作ですか?

更新2:
セッションがに保存されていることがわかりMemoryCacheClientますが、ベースコントローラーでセッションを取得しようとするとthis.Cache.Get<CustomUserSession>(SessionKey)nullが返されます(SessionKeyは次のようになりますurn:iauthsession:1) 。

4

2 に答える 2

6

いろいろいじった後、どうやら ServiceStack 認証をフックする方法は、次の方法で AuthService を呼び出すことです。

try {
    authResponse = AuthService.Authenticate(new Auth{ UserName = model.UserName, Continue = returnUrl, Password = model.Password });
} catch (Exception ex) {
    // Cut for brevity...
}

ではありません authResponse = this.CreateRestClient().Post<AuthResponse>("/auth/credentials", model);

ベースコントローラーAuthServiceで次のように定義されています。

public AuthService AuthService
{
    get
    {
        var authService = ServiceStack.WebHost.Endpoints.AppHostBase.Instance.Container.Resolve<AuthService>();
        authService.RequestContext = new HttpRequestContext(
            System.Web.HttpContext.Current.Request.ToRequest(),
            System.Web.HttpContext.Current.Response.ToResponse(),
            null);

        return authService;
    }
}

他のすべて (セッションを含む) は正しく動作するようになりました。

于 2012-08-24T04:06:47.453 に答える
4

ServiceStack Use Casesリポジトリでその方法を見つけることができます。次の例は MVC4 に基づいていますが、MVC3 でも完全に機能します: CustomAuthenticationMvc

于 2012-10-12T11:47:55.743 に答える