9

認証に新しい ASP.NET ID を使用する単純なアプリケーションに取り組んでいます。将来的にはモバイル アプリを用意する予定なので、Razor Web ページ (MVC やフォームなし) から jQuery から投稿する Web API に認証を配置しました。これまでのところ、投稿は正常に機能し、ユーザーを作成してログインします-API側で。

ただし、そこから先に進む方法を決定することはできません。適切なページを提供できるように IsAuthenticated を設定する必要がありますが、常に false が返されます。Identity は非常に新しいため、利用できるドキュメントはほとんどなく、Web API から実行するほど複雑なものを見つけることができません。

Q: ログイン後に Web API の ID 認証から正しく設定されるように戻す正しい方法は何User.Identity.IsAuthenticatedですか?

ログイン.cshtml

@if (User.Identity.IsAuthenticated)
{
    @RenderPage("/userpage.cshtml");
}

else
{
    <form id="loginForm">
        <b>Login</b>
        <input type="email" placeholder="Email" name="email" id="loginEmail" />
        <input type="password" placeholder="Password" name="password" id="loginPassword" />
        <input type="submit" value="Log In"/>
    </form>
 }

<script>
    $("#loginForm").submit(function(event)
    {
        event.preventDefault();
        $.post("/api/login/",
        {
            Username: $('#loginEmail').val(),
            Password: $('#loginPassword').val()
        }, function () 
           { 
               //???
           }, "json");

        return false;
    });
</script>

ログイン Web API

public class LoginController : ApiController
{
    public async void Post(UserInfo info)
    {
        var manager = new AuthenticationIdentityManager(new IdentityStore());
        var result = await manager.Authentication.CheckPasswordAndSignInAsync(HttpContext.Current.GetOwinContext().Authentication, info.Username, info.Password, true);

        if (result.Success)
        {
            //???
        }
    }
}
4

2 に答える 2

14

使用している認証方法によって異なります。ほとんどの Web アプリケーションは、フォーム (Cookie) 認証モジュールを主要な認証方法として使用します。Web ページでは正常に動作するはずですが、モバイル アプリなどのネイティブ クライアントで API を使用する場合は、最適な選択ではありません。Web API で Cookie 認証を有効にする場合は、CSRF 攻撃に注意する必要があります。

Cookie 認証を使用していると仮定すると、まだ 2 つの選択肢があります。1 つは FormsAuthentication IIS モジュールです。これはかなり古いものです。FormsAuthentication.SetAuthCookieを使用してユーザーをサインインする必要があります。

もう 1 つの方法は、認証をサポートするために既定の MVC 5 テンプレートで使用されるOWIN cookie ミドルウェアです。OWIN API でユーザーをサインインする方法に関する私の回答を確認してください

モバイル アプリで Web API のより良い認証ストーリーが必要な場合は、OWIN OAuth ミドルウェアを使用してベアラー トークンを Web API のプライマリ認証方法として有効にすることをお勧めします。MVC 5 SPA テンプレートでは、MVC および Cookie 認証と一緒に使用するための適切なパターンを示しています。私のブログ「VS2013 RC の SPA テンプレートのセキュリティ機能について」では、それらがどのように連携しているかについての一般的なアイデアを提供する必要があります。

ID フレームワークには、ほとんどの OWIN 認証コードを実装するOWIN パッケージがあります。したがって、独自に実装する必要はありません。なぜそれを使用しないのですか?

于 2013-10-12T00:23:55.837 に答える
1

Hongye Sun の回答から構築すると、正しい方法は、OWIN Cookie ミドルウェアを使用して Cookie を転送および保存することです。これを実現する正しい方法は、Startup.cs をプロジェクト ルートに追加し、次の内容を追加することです (これは、VS で提供されるスタートアップ テンプレートで使用できます)。Web API 応答は、Cookie を介して自動的に送信されます。

using Microsoft.AspNet.Identity.Owin;
[assembly: OwinStartup(typeof(MyApp.Startup))]
namespace MyApp
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseSignInCookies();
        }
    }
}

外部認証を含む詳細な説明については、この質問に対する Hongye Sun の回答を参照してください。

于 2013-10-12T01:29:22.337 に答える