在本地和Azure上使用Active Directory进行身份验证

时间:2015-02-18 21:24:21

标签: asp.net-mvc azure ldap

我正在为我公司的内部使用开发一个应用程序。我们希望应用程序能够在Azure上运行并利用Windows帐户进行身份验证。我们正在努力启用Active Directory联合服务器(ADFS),以便将组织AD同步到Azure AD。在这样做的同时,我正在研究负责确定用户是谁的代码。我的主要目标是将Admin控制器限制为属于活动目录组的用户。我的印象是ADFS应该允许我在Azure中查询。

我创建了一个利用LDAP来确定当前用户是否在特定组中的服务,并且它在本地运行良好。但是,通过一些阅读,我确定Azure AD不支持LDAP。织补!

与Azure AD通信的首选路由似乎是Graph API。但是,图API似乎不受企业/组织AD的支持。

我首先想到解决这个问题是利用依赖注入来根据环境切换正在使用的服务,但我认为必须有更好的方法。

我应该使用什么技术与内部部署的Active Directory以及Azure Active Directory进行交互?

2 个答案:

答案 0 :(得分:4)

我们在Azure实施中遇到了同样的问题,并与Microsoft详细讨论过。目前,目录查询没有通用的方法。我相信微软的计划是最终将GraphAPI添加到AD DS。

如果您使用基于声明的身份验证协议(如OpenID Connect),则另一个选择是让身份提供商向您的授权逻辑提供所需的值。

答案 1 :(得分:1)

ADFS是用于身份联合而非目录同步的工具。对于目录同步,您可以使用AADSync - http://www.microsoft.com/en-us/download/details.aspx?id=44225

实现此目的的最简单方法是使用与ADFS的联合,并让ADFS使用角色信息填充断言。在ADFS中设置新的依赖方并添加新的颁发转换规则

Template: Send Group Membership as a claim
Name: Admin claim
Users Group: Choose your domain local group
Outgoing claim type: Role
Value: MyAdminRole

您可以使用Visual Studio 2012或更高版本轻松设置联合,或添加OWIN启动类,如下所示:

    public void ConfigureAuth(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
        app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions()
        {
            MetadataAddress = "https://adfs.domain.com/federationmetadata/2007-06/federationmetadata.xml",
            Wtrealm = "urn:appid"
            // SignInAsAuthenticationType = // This is picked up automatically from the default set above
        });

        AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;

    }

然后您需要做的就是将Authorize属性添加到控制器:

[Authorize(Roles = "MyAdminRole")]
public class AdminController : Controller
{
 ...
}

为了完整起见,我还要补充说,一旦配置并运行AADSync,您还可以使用Graph API获取有关用户同步到Azure AD的信息。用户和组更新可能会延迟最多3个小时。

HTH