Azure Active Directory用户原理上下文服务器名称



我正在尝试获取Azure网站的上下文以获取用户详细信息。当尝试在Servername(第二个参数)上获取上下文时,我的代码在这一点上失败。在这种情况下,我在哪里可以从Azure中获取服务器名称。我从这里找到了一些信息。

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "mysitename.azurewebsites.net"))

完整代码示例

static GroupPrincipal[] GetUserAuthorisationGroups(string userPrincipalName)
{
    using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "mysitename.azurewebsites.net"))
        using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.UserPrincipalName, userPrincipalName))
        {
            return user.GetAuthorizationGroups().OfType<GroupPrincipal>().ToArray();
        }
    }
}

我将以您要完成的方式一般,更具体地回答。

首先 - Azure AD和Windows Server AD不是同一回事。他们俩都旨在解决相同的问题,但要解决这一问题(正如预期的那样 - 不受信任的非域环境(如云)具有明显不同的基础架构)。

更加混乱,可以将Windows Server AD同步到Azure AD,但只能将对象信息(例如用户,组等)同步。因此,该信息可以在Azure AD中获得。但是协议级别的内容,例如Kerberos,无法通过Azure AD获得(嗯,除了通过Azure Ad域服务之类的内容,但这更多的是遗产场景,并且不适用于您托管Web应用程序的Azure App Service)。

无论如何 - 因此,与其可以使用Kerberos与Windows Server AD交谈的受信任的域加入服务器,Azure AD依赖于OAuth和更现代的协议,这些协议可以通过Web且无需信任的服务器。无论托管服务器如何,受OAuth保护的Web应用程序或移动应用程序都可以工作。您可以在此处阅读有关AAD的更多信息:https://msdn.microsoft.com/en-us/library/azure/jj573650.aspx

看来,您正在尝试获得用户组以进行授权决策,并且您正在Azure App Service工作。您需要做两件事:

  • 对Azure AD进行身份验证,
  • 从Azure AD获取其他授权信息

身份验证相当简单。由于您在C#中,因此大多数可以通过Adal库来完成,该图书馆为您抽象了大部分的复杂性。您可以在此处的Azure GitHub样品中找到样品:

这些步骤的网是 - 将申请注册添加到Azure AD - 这将为您提供客户端ID(并且可以选择,稍后您需要的秘密)在Azure AD中唯一标识您的应用程序 - 将Adal Nuget软件包添加到您的应用 - 让Adal重定向用户登录Azure AD - 登录后消耗令牌并将用户记录到您的应用中

您可以在此处找到一个完整的示例:https://github.com/azure-samples/active-directory-dotnet-webapp-openidconnect

此示例将使您通过应用程序注册,并将ADAL配置为将用户登录到您的应用中。这至少会让您经过身份验证,因此您会知道您的用户是谁。

您要做的下一件事是 - 包括Azure AD应用程序角色,该角色将包含在索赔集中。您可以使用这些做出授权决定(例如[Authorize(Role=SomeRoleName)]类似于本地广告组的方式)或 - 查询Azure AD或Microsoft Graph API以获取其他用户信息,例如组成员或其他用户属性。

所有用户信息都存储在图中,因此您可以通过PrincipalSearcher来查询以获取用户信息,而不是本地广告。

这是一个使用Azure AD应用程序角色的示例:https://github.com/azure-samples/active-directory-dotnet-webapp-roleclaims

和另一种使用组索赔的(例如,包括返回索赔集中的组GUID):https://github.com/azure-samples/active-directory-dotnet-webapp-groups

最后,这是另一个示例,该示例询问AAD图以将组GUID解析为组名称,这对于迁移通过组检查授权的现有Windows AD代码很有用:https://github.com/jpda/azure-ad-ad----NetCore样本

希望会有所帮助。

最新更新