8

asp.net mvc Web API アプリケーションを構築していますが、メンバーシップの方法がわかりません。

私の現在のプロジェクトでは、これを持っています

私自身Users TableRole Table私はasp.netメンバーシップを使用していません。これは、荷物が多すぎて、データベースの設計方法に合わないためです(確かにできますが、多くの作業が必要なようです)

user多くの役割を持つこと roleができ、 は多くのユーザーを持つことができます。

私は EF を使用して、データベースへのほとんどすべての呼び出しを行っています。

過去のプロジェクトでは、自分Authorize Attributeのデータベースへの独自の呼び出しを行い、ユーザーがそのコントローラー/アクション メソッドで許可されているものとして正しいロールにあるかどうかを確認しました。

メンバーシップ プロバイダーを使用しないことで、 などの組み込み関数の一部を失いましたUser.IsInRole。まだ使えUser.Identity.Nameましたが、設定したクッキーのせいだと思います。

asp.net mvc 4/web apiで今それを行うベストプラクティスの方法は何ですか?

グーグルで「SimpleMembership」を見つけましたが、まだあまり読んでいません。

User.Identity.Name余談ですが、ユーザーを認証した場合、webapi で使用できますか?

4

2 に答える 2

4

SimpleMembership を使用して Web API のカスタム承認属性を作成する方法を説明する記事を次に示します。SimpleMembership は非常に柔軟で使いやすいですが、必ずしも使用する必要はありません。サービスが特定のユーザーがロールに含まれていることを確認し、ユーザーのログインとログアウトを行い、認証されていることを確認できる限り、この記事と同じ概念を採用し、代わりにメンバーシップ サービスを使用できます。

サービスが認証されていることを確認しない場合は、User.Identity.IsAuthenticated を使用でき、User.Identity.Name を使用して現在ログインしているユーザー名を取得できます。ユーザーのログイン時にサービスが Thread.CurrentPrincipal を正しく設定すると仮定します。また、HttpContext.Current.User を設定することもお勧めします。もちろん、SimpleMembership を使用している場合は、このことについて心配する必要はありません。

このカスタム承認属性は、API を公開する場合に備えて、フォーム認証と基本認証の両方をサポートします。コントローラで使用される authorize 属性とは異なり、認証されていない場合は Forbidden の HTTP ステータス コードを返し、認証されていない場合は Unauthorized を返します。ログオン ページにリダイレクトする代わりに。

于 2013-05-22T20:34:02.017 に答える
0

カスタム メンバーシップ プロバイダーを作成して、使用するメソッドのみを実装することもできます。に関する限り、クラスから継承して web.config に登録することUser.IsInRoleにより、カスタム ロール プロバイダーを作成できます。RoleProvider

これらの組み込み機能を使用したくない場合は、使用しないでUser.IsInRoleくださいMyService.IsInRole。カスタム プロバイダーを展開して組み込み関数を使用するか、単にそれを処理するサービス レイヤーを作成するかは、個人の好みの問題です。選択は、考慮すべき多くの要因と、プロジェクトの詳細に関連する要因に依存すると思います。たとえば、将来、他の外部開発者がこのプロジェクトで作業する予定がある場合は、カスタム メンバーシップとロール プロバイダーを選択する方が賢明です。これらの開発者は、カスタムを学習するよりも、この API に精通している可能性があるためです。サービス層。

于 2013-05-21T20:52:06.577 に答える