6

我正在拼凑一个基于Nancy.Demo.Authentication.Forms的演示应用程序。

我正在实施ClaimsandUserName在我的UserIdentity:IUserIdentity课堂上,根据演示,我有一个UserModelwith UserName.

SecureModule课堂上,我可以看到Context.CurrentUser可以用来查看登录的人,但根据界面,这仅提供用户名和声明。如果我随后需要为视图模型获取更多数据(例如登录用户的消息),我所能看到的用作 db 查询过滤器的只是用户名,这感觉很奇怪。我宁愿使用用户的唯一标识符。

我想我想要深入了解,如果将额外的字段添加到我的IUserIdentity实现中,或者添加到UserModel? 在哪里填充这些?

不确定我的问题是否清楚(我的脑海中并不清楚!),但是一些一般的基本架构建议会很受欢迎。

4

1 回答 1

11

抱歉延迟回复.. 目前有点忙 :)

IUserIdentity 是使用 Nancy 的内置身份验证助手所需的最小接口,您可以实现它并向您的类添加尽可能多的附加信息;它类似于标准的 .net IPrincipal。如果您确实添加了自己的信息,您显然必须转换为您的实现类型才能访问其他字段。我们可以添加一个 CurrentUser 方法来阻止您这样做,但这似乎有点多余。

如果您愿意,可以在此处停止阅读,或者如果您对表单身份验证的工作原理感兴趣,可以继续阅读。

FormsAuth 使用 IUsernameMapper 的实现(现在可能命名错误)在存储在客户端 cookie 中的 Guid 用户标识符和实际用户(IUserIdentity)之间进行转换。值得注意的是,此 GUID 需要在某处映射到用户/ID,但它不是您的数据库主键,它只是您(可能可预测的)用户 ID/名称和“令牌”之间的间接层存储在客户端。尽管 cookie 是加密的和 HMACd(取决于您的配置),但如果有人确实设法破解并重建 auth cookie,他们将不得不猜测其他人的 GUID 才能冒充他们,而不是更改用户名(更改为“admin”或类似的东西),或一个ID(第一个用户为1)。

希望这是有道理的:)

于 2012-02-01T13:51:47.223 回答