我创建了一个ASP.NET Web窗体应用程序,其身份验证机制设置为“组织帐户”,并且选择了“云-多个组织”选项。

然后,运行默认站点,我“注册”了两个完全不相关的Windows Azure AD帐户。

而且我可以在默认的“ Tenants”表中看到两个条目。

至今。这么好。

但是,我无法确定如何确定我的所有登录用户映射到哪个租户。

我如何映射:
    Context.User.Identity.Name

以便给单个租户ID以便隔离数据?

最佳答案

您仅获得TenantId(http://schemas.microsoft.com/identity/claims/tenantid)或IdentityProvider声明(http://schemas.microsoft.com/identity/claims/identityprovider)。这些是唯一标识用户租户的声明。
从.NET 4.0开始,查看声明从未如此简单。这是一个示例MVC剃刀视图示例:

@foreach (var claim in ((System.Security.Claims.ClaimsIdentity)User.Identity).Claims)
{
    <p><b>@claim.Type:</b> @claim.Value</p>
}


为了减轻这种情况,您可以创建一个扩展方法:

public static class ClaimsIdentityExtensions
{
    public static string GetTenantId(this ClaimsIdentity identity)
    {
        var claim = identity.Claims.FirstOrDefault(c => c.Type.Equals("http://schemas.microsoft.com/identity/claims/identityprovider"));
        return (claim != null) ? claim.Value : "unknown";
    }
}

07-28 01:38
查看更多