ASP.NET Identity + Bearer Token + Multi-Tenant

时间:2014-09-14 16:14:39

标签: c# asp.net asp.net-identity

我使用Entity Framework,WebAPI和ASP.NET Identity创建了一个多租户应用程序。基本上它会读取租户的子域,并使用它从数据库中读取连接字符串并在运行时设置它。

一切都很棒,数据库正在创建等,但现在唯一的问题是ASP.NET身份承载令牌。

当我为http://tenant1.#####.com/token生成承载访问令牌时,似乎令牌在同一个应用程序上签名(没有指定机器密钥),并允许访问http://tenant2.#####.com控制器,不应该是这种情况,因为它是不同的子域名/租户。

有什么方法可以解决这个问题吗?或许我应该研究其他安全框架而不是ASP.NET身份?

1 个答案:

答案 0 :(得分:3)

MVC5可以轻松地将租户名称声明添加到用户身份。 在Models目录中,修改ApplicationUser中的IdentityModels.cs类:

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
    // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
    var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);

    // Add claim for tenant name
    userIdentity.AddClaim(new Claim("tenantName", "abcCompany");

    // Add custom user claims here
    return userIdentity;
}

然后,当处理经过身份验证的请求时,请验证用户是否包含正确的声明和值。