【问题标题】:User information in Nancy南希的用户信息
【发布时间】:2017-11-24 05:22:43
【问题描述】:

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

我在我的UserIdentity:IUserIdentity 课程中实现ClaimsUserName,根据演示,我有一个UserModelUserName

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

我想我想要深入了解的是,将额外字段添加到我的IUserIdentity 实现还是UserModel 更好?在哪里填充这些?

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

【问题讨论】:

标签: nancy


【解决方案1】:

抱歉回复晚了..现在有点忙:)

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

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

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

希望这是有道理的:)

【讨论】:

  • 这也适用于令牌认证?你有任何实现示例吗?我正在尝试将 IUserPrincipal 转换为我的具体实现,但这不起作用 =(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2018-11-02
相关资源
最近更新 更多