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

Asp.net mvc 在本地和Azure上使用Active Directory进行身份验证,asp.net-mvc,azure,ldap,Asp.net Mvc,Azure,Ldap,我正在开发一个应用程序供公司内部使用。我们希望应用程序在Azure上运行,并利用windows帐户进行身份验证。我们正在努力启用Active Directory联合服务器(ADF),以便将我们的组织广告同步到Azure广告。在这一过程中,我正在编写负责确定用户身份的代码。我的主要目标是将管理控制器限制为属于active directory组的用户。我的印象是ADFS应该允许我在Azure中查询这个问题 我创建了一个服务,它利用LDAP来确定当前用户是否在特定的组中,并且在本地工作得很好。然而,通

我正在开发一个应用程序供公司内部使用。我们希望应用程序在Azure上运行,并利用windows帐户进行身份验证。我们正在努力启用Active Directory联合服务器(ADF),以便将我们的组织广告同步到Azure广告。在这一过程中,我正在编写负责确定用户身份的代码。我的主要目标是将管理控制器限制为属于active directory组的用户。我的印象是ADFS应该允许我在Azure中查询这个问题

我创建了一个服务,它利用LDAP来确定当前用户是否在特定的组中,并且在本地工作得很好。然而,通过一些阅读,我确定Azure AD不支持LDAP。该死

与Azure AD通信的首选路径似乎是
图形API
。但是,企业/组织广告似乎不支持graph API

我的第一个想法是利用依赖注入根据环境切换正在使用的服务,但我认为必须有更好的方法


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

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


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

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


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

ADFS是身份联合的工具,而不是目录同步。对于目录同步,您将使用AADSync-

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

您可以使用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(Roles = "MyAdminRole")]
public class AdminController : Controller
{
 ...
}
为完整起见,我还要补充一点,一旦AADSync配置并运行,您还可以使用Graph API在同步到Azure AD后获取有关用户的信息。不过,用户和组更新可能会延迟3小时


HTH

ADFS是身份联合的工具,而不是目录同步。对于目录同步,您将使用AADSync-

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

您可以使用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(Roles = "MyAdminRole")]
public class AdminController : Controller
{
 ...
}
为完整起见,我还要补充一点,一旦AADSync配置并运行,您还可以使用Graph API在同步到Azure AD后获取有关用户的信息。不过,用户和组更新可能会延迟3小时


HTH

您应该查看Azure AD的组声明和应用程序角色功能。您可以将内部广告同步到Azure AD,在Azure AD中设置组/角色,然后将其用作应用程序中的真实来源。请参阅:您应该查看Azure AD的组声明和应用程序角色功能。您可以将内部广告同步到Azure AD,在Azure AD中设置组/角色,然后将其用作应用程序中的真实来源。请参阅:仅供参考,您当前无法在Azure AD中扩展架构,因此,如果您的应用程序依赖于任何自定义属性,则使用Graph API和AAD是不可选项的。@从V1.5开始,支持BenV架构扩展:这些是特定于应用程序的扩展,基本上允许单个应用程序在目录中存储和读取属性(中的目标#1)。不支持从on prem目录同步的全局模式扩展(前面文章中的目标#2)。仅供参考,您当前无法在Azure AD中扩展架构,因此如果您的应用程序依赖任何自定义属性,则使用Graph API和AAD是不可选项的。@从V1.5开始,支持BenV架构扩展:这些是特定于应用程序的扩展,基本上允许单个应用程序在目录中存储和读取属性(中的目标#1)。不支持从on prem目录同步的全局模式扩展(前面文章中的目标#2)。