azure活动目录用户原则上下文服务器名称

时间:2017-03-03 21:23:10

标签: c# azure azure-active-directory

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

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();
        }
    }
}

1 个答案:

答案 0 :(得分:4)

我会回答一般情况,更具体地回答一下你正在努力完成的事情。

首先 - Azure AD和Windows Server AD不是一回事。它们都旨在解决相同的问题,但却采用完全不同的方式(正如预期的那样 - 像云一样的不受信任的非域环境具有明显不同的基础架构)。

稍微进一步思考,Windows Server AD可以同步到Azure AD,但只能同步对象信息 - 如用户,组等,以便Azure AD中提供信息。但是协议级别的东西,比如Kerberos,不能通过Azure AD获得(除了通过Azure AD域服务之类的东西,但是对于遗留场景来说更多,并且不适用于您在哪里使用Azure App Service #39;重新托管您的网络应用。)

无论如何 - 因此,Azure AD不依赖于可以使用Kerberos与Windows Server 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)]类似于使用本地AD组的方式),或者 - 查询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-groupclaims

最后,这是另一个查询AAD Graph以将组GUID解析为组名的示例,对于迁移通过组检查授权的现有Windows AD代码非常有用:https://github.com/jpda/azure-ad-netcore-sample

希望有所帮助。