2012-02-15 17 views
4

認証クッキーのUserDataエリア(Storing and accessing a legacy UserID in asp.net membership)に自分のuserid(int)を保存することで、自分のUserテーブルをasp.netメンバーシップにリンクしたいと考えていました。認証チケットにasp.netメンバーシップのユーザーIDが格納されていないのはなぜですか?

私のアプリケーションは私自身が使用するもので、asp/c#の学習に役立つので、私のデータベースを逆に使ってメンバーシップを調整するという作業を比較することをお勧めします。それに応じてデータベースを調整してください)。

guid(uniqueidentifier)UserIDを私のすべてのユーザー関連テーブルの外部キーとして使用するように変換すると、私のアプリケーションでUserIDに簡単にアクセスできるようにする必要があります。

Guid userID = (Guid)Membership.GetUser().ProviderUserKey; 

私が正しく理解していれば、これはデータベースの読み込みが含まれています。おそらく私は気まずいですが、毎回のリクエストで少し不必要なようです。私はチケットに入れたいと思うだろう。私はPK値をチケット(guidまたはint)に入れても問題は見られません。セキュリティリスクはありますか?メンバーシップは、サロゲートではなくキーとしてUserNameを使用するとうれしいようです。それでは、なぜUserIDをチケットに入れなかったのだろう?

+0

int-IDとGUIDをリンクするカスタムメンバーシッププロバイダを使用できます(例:http://stackoverflow.com/questions/6532418/how-to-combine-using-membership-api-with-own)。 -application-related-data/6532611#6532611 –

+0

@TimSchmelter - これは本質的に私がやっていることです。私はちょうど既定のメンバーシップを持つユーザーIDが認証チケットに格納されていないのだろうかと思っています。彼らは忘れてしまったのか、そこに置かない理由があるのか​​。 – Fruitbat

答えて

1

クッキーとURLが実用的な最大の長さがある - FormsAuthenticationTicket.UserDataドキュメントの状態:あなたはUserDataプロパティに格納されるデータの量を制限する必要があります

」を あなたはUserDataプロパティのサイズがないことを確認する必要があります無効なCookieまたはあまりに長いURLのの結果ではありません "

ASP.NETは、認証チケットをURLに格納するcookieless forms authenticationを使用するように設定できます。この場合、ASP.NET ISAPIフィルタは、チケット情報を削除してからURLを書き換えるための余分な作業も必要です。

その理由の一部は、おそらくデフォルトのCookie/URLの長さを最小限に保つというトレードオフに起因する可能性があります。暗号化されたシリアル化されたGuidをチケットに保存すると、Cookie/URLの長さが増えます。 UserDataに格納できるデータの量をさらに制限します(多くは許されません)。

+0

少なくともこれはもっともらしいようです。確かに、ユーザー名が一意であれば、表示名とデータベースキーの両方の機能をカバーします。私が見る限り、usernameの一意性はデータベースの制約ではなく、CreateUserストアドプロシージャのチェックです。 – Fruitbat

+1

はい、なぜusernameが* table *制約ではないのか困惑しています。メンバーシップ・プロバイダーはスケーラビリティーと柔軟性のバランスをとるよう意図的に書かれていたと思います。マイクロソフトでは、開発者が必要に応じて独自のプロバイダを公開することを期待しているため、APIの機能はおそらく廃止されました。MSに賞賛の周りに投げる人ではなく;-)、彼らはかなり良い仕事をしたIMHO。私の以前の仕事では、*本当の*開発作業を行い、(ユーザーが意図したように) 'UserId'を多用しました。プロバイダを書く代わりに、静的ヘルパークラスを作成しました。その中には、とりわけ 'UserId'がキャッシュされているメソッドがたくさんありました。 – kuujinbo

0

IPrincipleを実装する独自のUserPrincipleを書くことができます.IPrincipleはuserIDを一度与えることができ、実際にデータベースにアクセスすることなくアプリケーションのどこでも呼び出すことができます。 それでも必要な場合は、cookieでuserIdを使用できます。

+1

確かに私はあなたが質問を逃したと思うことができます。 – Fruitbat

関連する問題