gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:27 25 4
gpt4 key购买 nike

我正在尝试获取我的 azure 网站的上下文以获取用户详细信息。当尝试获取服务器名称(第二个参数)的上下文时,我的代码此时失败了。在这种情况下,我可以在哪里从 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();
}
}
}

最佳答案

我将笼统且更具体地回答您想要实现的目标。

首先 - Azure AD 和 Windows Server AD 不是同一件事。它们都旨在解决相同的问题,但解决问题的方式却截然不同(正如所预料的那样 - 像云这样不受信任的非域环境具有显着不同的可用基础设施)。

更复杂的是,Windows Server AD 可以同步到 Azure AD,但只能同步对象信息(例如用户、组等),以便这些信息在 Azure AD 中可用。但是协议(protocol)级别的东西(例如 Kerberos)无法通过 Azure AD 获得(好吧,除了通过 Azure AD 域服务之类的东西,但这更多地适用于旧方案,并且不适用于托管 Web 应用程序的 Azure 应用程序服务)。

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

您似乎正在尝试获取用户组以进行授权决策,并且您正在 Azure 应用服务中工作。您需要做两件事:

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

身份验证相当简单。由于您使用的是 C#,因此大部分操作都可以通过 ADAL 库完成,该库为您抽象了大部分复杂性。您可以在此处的 Azure GitHub 示例中找到示例:

这些步骤的目的是- 将应用程序注册添加到Azure AD- 这将为您提供一个客户端 ID(以及可选的 secret ,您稍后将需要它),用于在 Azure AD 中唯一标识您的应用程序- 将 ADAL NuGet 包添加到您的应用程序- 让 ADAL 将用户重定向到 Azure AD 进行登录- 登录后消耗 token 并将用户登录到您的应用程序

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

此示例将帮助您完成应用注册和配置 ADAL 以将用户登录到您的应用。这至少会让您通过身份验证,这样您就会知道您的用户是谁。

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

所有用户信息都存储在图表中,因此您可以通过 PrincipalSearcher 查询其中的用户信息,而不是查询本地 AD。

以下是使用 Azure AD 应用程序角色的示例:https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims

另一个使用组声明(例如,在返回的声明集中包含组 GUID):https://github.com/Azure-Samples/active-directory-dotnet-webapp-groupclaims

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

希望有帮助。

关于c# - Azure Active Directory 用户原理上下文服务器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42588666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com