2012-01-30 12 views
6

私はNancy.Demo.Authentication.Formsに基づいてデモアプリケーションをノックアウトしています。ナンシーのユーザー情報

私はデモに従って、私はUserNameUserModelを持って、私のUserIdentity:IUserIdentityクラスでClaimsUserNameを実装しています。

SecureModuleクラスでは、Context.CurrentUserを使用してログオンしているユーザーを確認できますが、インターフェイスごとにユーザー名とクレームのみが提供されています。私はビューモデルのためのより多くのデータを(ログオンユーザーのためのメッセージを)取得する必要がある場合、私はdbクエリのフィルタとして使用するために見ることができるすべては、よく、奇妙なユーザー名です。私はむしろユーザーのuniqueIdentifierを使用しています。

IUserIdentityの実装に、またはUserModelに余分なフィールドを追加する方が良い場合は、私は一番下にいきたいと思いますか?そして、これらをどこに入れるのですか?

私の質問は明確ではありませんが(私の頭にはっきりしていません!)、いくつかの一般的な基本的なアーキテクチャのアドバイスは下に行くでしょう。

+0

Nancy.Demo.Authentication.Formsへのリンク。もう動作しません:[ここに新しいURLがあります](https://github.com/NancyFx/Nancy/tree/master/samples/Nancy.Demo.Authentication.Forms) – klaas

答えて

11

遅延応答のため申し訳ありません...現時点では少し多忙な:)

IUserIdentityはナンシーの認証ヘルパーに建てを使用するために必要な最低限のインターフェースである、あなたはそれを実装することができ、あなたが好きなだけ情報を追加あなたのクラスにそれは標準に似ています。IPrincipal。独自の情報を追加する場合、追加のフィールドにアクセスするには、実装タイプにキャストする必要があります。私たちはCurrentUserメソッドを追加してそれをやめさせることができますが、少し冗長に思えます。

FormsAuthを変換するには(おそらく今間違って命名された)IUsernameMapperの実装を使用しています..あなたが好きな場合は、ここで読むのをやめたり、あなたは認証の動作を形成する方法に興味があるならあなたが読むことができますクライアントクッキーに格納されているGuidユーザーIDと実際のユーザー(IUserIdentity)の間の値です。このGUIDはどこかのuser/idにマップする必要がありますが、データベースのプライマリキーではなく、(おそらく予測可能な)ユーザーIDと名前との間の単なる間接的なレイヤーです。クライアントに格納されます。クッキーは暗号化されHMACd(あなたの設定に依存します)が、誰かがクラックを開いて再構築すると、他人のGUIDを偽装してユーザ名を変更するのではなく、またはsmilarなもの)、またはid(最初のユーザの場合は1)です。理にかなって

希望:)

+0

多くの意味があります、ありがとうございました! – DavidGouge

+0

これはトークン認証にも有効ですか?私は具体的な実装にIUserPrincipalをキャストしようとしていますが、これは動作していません=( –

関連する問題