Моя цель — создать приложение в Azure Active Directory для моих клиентов с помощью учетной записи глобального администратора CSP с помощью C#.
Поскольку он работает через команды PowerShell.
Login-AzureRmAccount ==> CSP Global admin credentials
Select-AzureRmSubscription -TenantId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(Enter your Customer Microsoft ID)" ==> Select a tenant where I want to create application
$password = ConvertTo-SecureString "SomePass@123" -asplaintext -force
New-AzureRmADApplication -DisplayName "MyApp" -HomePage "http://MyApp" -IdentifierUris "http://MyApp" -Password $password ==> Application created in the above mentioned tenants account.
Пожалуйста, помогите мне сделать то же самое на С#.
Я написал для вас пример кода. Пожалуйста, чек.
Вы можете использовать Бета-версия API Microsoft Graph для создания нового приложения на портале Azure.
Note One of the following permissions is required to call this API. To learn more, including how to choose permissions, see Permissions. see the screen shot below
Формат запроса
Обновлять:
Я пробовал так:
Запрос от Проводник Microsoft Graph
Установите тело запроса, как показано ниже.
{
"displayName": "Your Application Name"
}
См. снимок экрана ниже
Портал Azure:
После успешного ответа проверьте на лазурном портале
Point to remember
If you tried with Microsoft Graph Explorer must set below permission.
См. снимок экрана ниже
Для получения дополнительной информации вы можете проверить здесь
Note: APIs under the /beta version in Microsoft Graph are subject to change. Use of these APIs in production applications is not supported.
Спасибо за ваше время. Но я хочу зарегистрировать приложение в своей учетной записи Azure AD арендаторы, используя учетные данные глобального администратора партнерский центр Майкрософт.
Позвольте мне проверить учетную запись партнера, а затем я обновлю свой ответ. Я пробовал с Microsoft Graph Explorer, который отлично работает для меня. developer.microsoft.com/en-us/graph/graph-explorer
Благодарю за ваш ответ. Будем рады услышать от вас.
@mohammedzaid Я обновил ответ. вы можете попробовать сейчас. Этот пример я сделал с партнерской учетной записью с учетными данными администратора. проверьте пример.
Я думаю, вы не поняли мой вопрос. Я хочу зарегистрировать приложение в учетной записи арендатора (клиента) моего партнерского центра Страница клиента. Этот URL-адрес будет содержать список всех арендаторов (клиентов). Используя их идентификатор и учетные данные администратора Центра партнеров, я смогу зарегистрировать приложение в их Azure AD, как я могу сделать с помощью приведенного выше сценария PowerShell. жду Вашего ответа
@mohammedzaid Вы имели в виду, что хотите создать арендатора partner.microsoft.com/en-us/dashboard/account/v3/… в активном каталоге Azure?
Нет, в Страница клиента выберите клиента, перейдите к Управление услугами и щелкните Azure Active Directory, вы будете перенаправлены в Azure AD вашего клиента, где вы можете создавать приложения, пользователей, группы от имени клиентов. Здесь я просто хочу создать приложение. То же самое я хочу добиться программно от С#. Вы можете выполнить приведенный выше сценарий PowerShell, чтобы понять мои требования и проверить, будет ли создано приложение Azure AD вашего клиента.
Не могли бы вы попробовать фрагмент кода. Я протестировал на своей стороне, и он сделал то же самое, что и сценарий PS.
public static string postRequest(string url, string access_token, string data)
{
byte[] buffer = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "post";
request.ContentType = "application/json";
request.Headers.Add("Authorization", "Bearer " + access_token);
//request.Headers.Add("other header", "it's value");
if (data != null)
buffer = Encoding.UTF8.GetBytes(data);
else
buffer = Encoding.UTF8.GetBytes("");
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return response.StatusCode + " " + reader.ReadToEnd();
}
}
public class PasswordCredential
{
public string startDate;
public string endDate;
public string keyId;
public string value;
}
public class AppConfiguration
{
public bool availableToOtherTenants;
public string displayName;
public string homepage;
public List<string> identifierUris = new List<string>();
public List<PasswordCredential> passwordCredentials = new List<PasswordCredential>();
}
static void Main(string[] args)
{
string tenantId = @"customer tenant id";
string resource = @"https://graph.windows.net/";
string clientId = @"1950a258-227b-4e31-a9cf-717495945fc2";
string returnUri = @"urn:ietf:wg:oauth:2.0:oob";
var context = new AuthenticationContext("https://login.microsoftonline.com/" + tenantId);
var uri = new Uri(returnUri);
var platformParams = new PlatformParameters(PromptBehavior.Always);
var authResult = context.AcquireTokenAsync(resource, clientId, uri, platformParams).Result;
var accessToken = authResult.AccessToken;
var url = @"https://graph.windows.net/{customer_tenant_id}/applications?api-version=1.6";
var passwordCredential = new PasswordCredential();
passwordCredential.startDate = DateTime.UtcNow.ToString("yyyy-MM-ddThh:mm:ssZ");
passwordCredential.endDate = DateTime.UtcNow.AddYears(1).ToString("yyyy-MM-ddThh:mm:ssZ");
passwordCredential.keyId = Guid.NewGuid().ToString();
passwordCredential.value = "TestPassword1.";
var appConfiguration = new AppConfiguration();
appConfiguration.availableToOtherTenants = false;
appConfiguration.displayName = "MyApp";
appConfiguration.homepage = "Https://MyApp";
appConfiguration.identifierUris.Add("https://MyApp");
appConfiguration.passwordCredentials.Add(passwordCredential);
var body = JsonConvert.SerializeObject(appConfiguration);
//Console.WriteLine(body);
var result = postRequest(url, accessToken, body);
Console.WriteLine(result);
Console.ReadLine();
}
Я быстро создал для вас пример с помощью ADAL, Newtonsoft.Json и HttpWebRequest. Вы можете сначала попробовать этот фрагмент кода.
Update: It is not suggested to hardcode your username and password. If you enable MFA, you may not able to get a token. If MFA is disabled, you can try with the follwoing code snippet:
string userName = @"[email protected]";
string passWord = @"password";
var context = new AuthenticationContext("https://login.microsoftonline.com/tenant_id");
result = context.AcquireTokenAsync(
resource,
clientid,
new UserPasswordCredential(userName, passWord)).Result;
Спасибо, это именно то, что мне нужно, но как я могу жестко закодировать свое имя пользователя и пароль, чтобы избежать этого Запрос на вход в Microsoft
Не рекомендуется жестко кодировать имя пользователя и пароль. И если MFA включен, вы не сможете успешно получить токен.
Поскольку существует несколько учетных записей CSP, я буду передавать имя пользователя и пароль динамически. и MFA также отключен во всех учетных записях. Поэтому я хочу, чтобы это было жестко закодировано, пожалуйста, помогите мне достичь этого.
@mohammedzaid Пожалуйста, проверьте часть ответа об обновлении, где я объяснил, как вы можете сделать это жестко запрограммированным. Спасибо
Упомянутый идентификатор клиента string clientId = @"1950a258-227b-4e31-a9cf-717495945fc2";
является глобальным для всех, потому что у меня нет приложений, зарегистрированных этим идентификатором клиента, просто небольшое сомнение. Ваша готовность помочь везде, где это необходимо, очень ценится. Спасибо
@mohammedzaid Рад слышать, что добро пожаловать, удачного кодирования :)
@mohammedzaid Да, это глобально для всех.
Благодарю вас за информацию:)
Взгляните и дайте мне знать, если у вас есть еще вопросы. Спасибо