6

Nancy.Demo.Authentication.Formsに基づくデモアプリをまとめています。

私は自分のクラスで and をClaims実装しています。デモによると、with があります。 UserNameUserIdentity:IUserIdentityUserModelUserName

SecureModuleクラスでは、ログオンしているユーザーを確認するために を使用できることがわかりますContext.CurrentUserが、インターフェイスによると、これはユーザー名とクレームのみを提供します。次に、ビュー モデルのデータ (ログオン ユーザーのメッセージなど) をさらに取得する必要がある場合、データベース クエリのフィルターとして使用できるのはユーザー名だけです。ユーザーの uniqueIdentifier を使用したいのです。

IUserIdentity実装に追加のフィールドを追加する方が良い場合、またはUserModel? そして、これらをどこに入力しますか?

私の質問がそれほど明確であるかどうかはわかりませんが (私の頭では明確ではありません!)、一般的な基本的なアーキテクチャのアドバイスは役に立ちます。

4

1 に答える 1

11

返信が遅れて申し訳ありません..現時点では少し多忙です:)

IUserIdentity は、Nancy の組み込み認証ヘルパーを使用するために必要な最小限のインターフェイスです。これを実装して、クラスに好きなだけ追加情報を追加できます。標準の .net IPrincipalに似ています。独自の情報を追加する場合は、実装タイプにキャストして、追加のフィールドにアクセスする必要があります。CurrentUser メソッドを追加して、それを行う必要がないようにすることもできますが、少し冗長に思えます。

必要に応じてここで読むのをやめることも、フォーム認証のしくみに興味がある場合は続きを読むこともできます..

FormsAuth は、IUsernameMapper の実装 (現在はおそらく間違った名前になっています) を使用して、クライアント Cookie に格納されている Guid ユーザー識別子と実際のユーザー (IUserIdentity) の間で変換を行います。この GUID はどこかでユーザー/ID にマップする必要があることに注意してください。ただし、これはデータベースの主キーになることを意図したものではありません。(おそらく予測可能な) ユーザー ID/名前と「トークン」の間の間接レイヤーにすぎません。クライアントに保存されます。Cookie は暗号化されており、HMACd (構成によって異なります) ですが、誰かがクラックを開いて認証 Cookie を再構築した場合、偽装するには、ユーザー名を (「admin」に) 変更するのではなく、他の人の GUID を推測する必要があります。または似たようなもの)、または id (最初のユーザーの場合は 1)。

それが理にかなっていることを願っています:)

于 2012-02-01T13:51:47.223 に答える