我正在尝试获取我的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();
}
}
}
答案 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。你需要做两件事:
身份验证非常简单。由于您使用的是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
希望有所帮助。