我创建了一个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";
}
}