【发布时间】:2014-09-14 16:14:39
【问题描述】:
我使用 Entity Framework、WebAPI、ASP.NET Identity 创建了一个多租户应用程序。基本上它读取租户的子域并使用它从数据库中读取连接字符串并在运行时设置它。
一切都很好,正在创建数据库等,但现在唯一的问题是 ASP.NET 身份承载令牌。
当我为http://tenant1.#####.com/token 生成了一个不记名访问令牌时,似乎该令牌是在同一个应用程序上签名的(没有指定机器密钥)并且它也允许访问http://tenant2.#####.com 控制器,这应该'情况并非如此,因为它是不同的子域/租户。
有没有办法解决这个问题?或者也许我应该研究其他安全框架而不是 ASP.NET 身份?
【问题讨论】:
-
您需要控制令牌并在此处添加自定义数据,即租户名称。由于令牌基于声明,这应该是可能的。然后对每个请求进行另一次检查,以验证当前租户是否与令牌中的租户匹配。例如,此检查可以在自定义 http 模块中完成。
-
您好,在这种情况下,使用声明是一种“安全”的方法吗?因为只需要能够使用正确的tenantid声明来欺骗令牌并且请求可能会通过吗?
-
您不能在客户端欺骗令牌。
-
@WiktorZychla 您的解决方案有效,感谢它
标签: c# asp.net asp.net-identity