- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一些代码,使用图形 API 在 Azure AD 中创建用户。我从网上的一个例子开始,但现在添加用户时失败了,在线
等待 adClient.Users.AddUserAsync(userGraphObj);
在下面的 CreateUser()
方法中。我得到的错误是
我正在使用 .NET Core 2.0,在 Windows 7 上调试。谷歌搜索,我发现他们为 2.0 恢复了序列化,but only for specific types .
我真的不在乎。如何在代码中将用户添加到 Azure AD?
const String appClientID = "2be733f1-88c3-6482-8e2a-5e9631fc3a32";
const String tenant = "espn.onmicrosoft.com";
const String authString = "https://login.microsoftonline.com/" + tenant;
const String authClientSecret = "dDdaVGee315s65ewDSWEwfdw7wq5efDNO5C3cvN4RA";
const String resAzureGraphAPI = "https://graph.windows.net";
const String serviceRootURL = resAzureGraphAPI + appClientID;
private ActiveDirectoryClient GetAADClient()
{
Uri serviceRoot = new Uri(serviceRootURL);
ActiveDirectoryClient adClient = new ActiveDirectoryClient(
serviceRoot, async () => await GetAppTokenAsync());
return adClient;
}
private static async Task<String> GetAppTokenAsync()
{
AuthenticationContext authenticationContext = new AuthenticationContext(authString, false);
ClientCredential clientCred = new ClientCredential(appClientID, authClientSecret);
AuthenticationResult authResult = await authenticationContext.AcquireTokenAsync(resAzureGraphAPI, clientCred);
return authResult.AccessToken;
}
public async Task<IActionResult> CreateUser()
{
var adClient = GetAADClient();
//Construct The User
String userEmail = "TestUser@example.com";
String mailNickname = userEmail.Split(new char[] { '@' }).FirstOrDefault();
var userGraphObj = new Microsoft.Azure.ActiveDirectory.GraphClient.User()
{
GivenName = "Test",
Surname = "User",
Mobile = "13133124044",
MailNickname = mailNickname,
DisplayName = "Test User",
AccountEnabled = true
};
await adClient.Users.AddUserAsync(userGraphObj);
return Ok(tempPassword);
}
最佳答案
Microsoft 本身建议不再使用 Azure AD Graph API,而推荐使用 Microsoft Graph API(参见 blog post)。
如果您对使用 Azure AD API 的要求不是很高,请按照以下步骤通过最新的 API 创建用户。
免责声明:
User.ReadWrite.All
或 Directory.ReadWrite.All
)获取 token 的代码:
const String appClientID = "2be733f1-88c3-6482-8e2a-5e9631fc3a32";
const String tenant = "brazzers.onmicrosoft.com";
const String authString = "https://login.microsoftonline.com/" + tenant;
const String authClientSecret = "dDdaVGee315s65ewDSWEwfdw7wq5efDNO5C3cvN4RA";
public static GraphServiceClient GetAuthenticatedClient()
{
var delegateAuthenticationProvider = new DelegateAuthenticationProvider(
async (requestMessage) =>
{
var accessToken = await GetAppTokenAsync();
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
}
);
return new GraphServiceClient(delegateAuthenticationProvider);
}
private static async Task<String> GetAppTokenAsync()
{
// this doesn't work for desktop apps,
// and PublicClientApplication throws a NotImplementedException
var cca = new ConfidentialClientApplication(
appClientID,
authString,
"http://www.example.com/", // no redirect
new ClientCredential(authClientSecret),
new TokenCache(),
new TokenCache());
var authResult = await cca.AcquireTokenForClientAsync(new[] { $"https://graph.microsoft.com/.default" });
return authResult.AccessToken;
}
创建用户的代码(由 samples 提供):
public async Task<User> CreateUser(GraphServiceClient graphClient)
{
// This snippet gets the tenant domain from the Organization object to construct the user's email address.
var organization = await graphClient.Organization.Request().GetAsync();
var domain = organization.CurrentPage[0].VerifiedDomains.ElementAt(0).Name;
// Add the user.
var userEmail = "TestUser@" + domain;
var mailNickname = userEmail.Split(new char[] { '@' }).FirstOrDefault();
return await graphClient.Users.Request().AddAsync(new User
{
AccountEnabled = true,
DisplayName = "Test User",
MailNickname = mailNickname,
PasswordProfile = new PasswordProfile
{
Password = "super_strong_password"
},
UserPrincipalName = userEmail
});
}
关于c# - 调用 AddUserAsync .NET Core 2.0 时出现 PlatformNotSupported 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48385996/
我已将库 FluentFTP 移植到 .NET 标准/.NET 核心,但异步方法在异步/等待 block 中使用 BeginInvoke。所以它是这样的: async ConnectAsync(){
我正在使用 ServiceStack。 Redis 来访问我的远程 Redis 服务器。当我在我的 PC(Unity Android 环境)上运行它时,它不会抛出任何异常。在我从 Unity 导出 .
我正在尝试编写一些代码,使用图形 API 在 Azure AD 中创建用户。我从网上的一个例子开始,但现在添加用户时失败了,在线 等待 adClient.Users.AddUserAsync(user
我是一名优秀的程序员,十分优秀!