我需要以编程方式在azure活动目录中创建用户或组。我在谷歌搜索,我发现了多种解决方案,如使用Graph API,C#Code等。但我对这种方法有点困惑。
任何人都可以帮助我解决这些方法之间的差异,并建议我采用最佳方法吗?如果有任何代码示例,请告诉我。
提前致谢!!
答案 0 :(得分:1)
Azure广告支持multiple protocols。要获取Azure AD Graph的令牌,我们需要在OAuth 2.0 / OpenId connect中选择合适的流以与Azure AD进行交互。
例如,如果您正在开发网络应用,则 OAuth代码授权流程可能是一个不错的选择。如果应用程序是守护程序应用程序或服务应用程序,则客户端凭据流更好。有关这些方案的更多信息,请参阅this document。
要在Web应用程序中获取Azure AD Graph的令牌,您可以参考this code sample。在此代码示例的line of 104处,它获取Azure AD Graph的访问令牌。然后在控制器中,您可以使用以下代码从缓存中获取令牌并使用Azure AD Graph创建用户:
string graphResourceId = "https://graph.windows.net";
string tenantId = "xxx.onmicrosoft.com";
AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/xxx.onmicrosoft.com");
ClientCredential credential = new ClientCredential("{clientId}", "{secret}");
string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
AuthenticationResult result = await authContext.AcquireTokenSilentAsync(graphResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
var accessToken = result.AccessToken;
Uri servicePointUri = new Uri(graphResourceId);
Uri serviceRoot = new Uri(servicePointUri, tenantId);
ActiveDirectoryClient graphClient = new ActiveDirectoryClient(serviceRoot, async () => await Task.FromResult(accessToken));
var user = new User();
user.AccountEnabled = true;
user.DisplayName = "testName";
user.UserPrincipalName = "testName@xxx.onmicrosoft.com";
user.MailNickname = "testName";
user.UsageLocation = "US";
user.PasswordProfile = new PasswordProfile
{
Password = "xxxxxx",
ForceChangePasswordNextLogin = true
};
await graphClient.Users.AddUserAsync(user);
应用程序需要Directory.ReadWrite.All
来创建用户和组。有关您可以参考的权限的更多细节here。