2012-01-30 59 views
6

我正在敲一个基于Nancy.Demo.Authentication.Forms的演示应用程序。Nancy的用户信息

我正在实施ClaimsUserName在我的UserIdentity:IUserIdentity班,根据演示,我得到UserModelUserName

SecureModule类中,我可以看到可以使用Context.CurrentUser来查看它是谁登录的,但根据接口,这只提供用户名和声明。如果我然后需要为视图模型获取更多数据(例如登录用户的消息),我可以看到用作数据库查询的筛选器的用户名称感觉很奇怪。我宁愿使用用户的uniqueIdentifier。

我想我想要达到的底部,如果更好地将额外的字段添加到我的IUserIdentity实现或UserModel?以及在哪里填充这些?

不确定我的问题是否清楚(在我的脑海里并不清楚!),但是一些基本的基本架构建议可能会让你失望。

+0

链接到Nancy.Demo.Authentication.Forms。不再工作了:[这里是新的URL](https://github.com/NancyFx/Nancy/tree/master/samples/Nancy.Demo.Authentication.Forms) – klaas 2017-11-23 14:53:25

回答

11

很抱歉的延迟回复..位的时刻:)忙碌

的IUserIdentity是因为你喜欢用南希内置的验证辅助器,就可以实现这一点,添加尽可能多的附加信息所需的最小接口给你的班级;它与标准类似.net IPrincipal。如果您添加了自己的信息,那么显然必须转换为实现类型才能访问其他字段。我们可以添加一个CurrentUser方法来阻止你必须这样做,但它似乎有点多余。

你可以停止阅读这里,如果你喜欢,也可以阅读,如果你感兴趣的是如何窗体身份验证的工作原理..

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

希望有道理:)

+0

非常有意义,谢谢你的帮助! – DavidGouge 2012-02-01 13:56:29

+0

这也适用于令牌认证?你有任何实现示例?我试图将IUserPrincipal强制转换为具体实现,但这不起作用=( – 2015-07-22 21:07:31