How to create Azure AD users from within ASP .NET Core?

Обновить

December 2018

Просмотры

1.5k раз

2

I'm currently working in portal using ASP .NET Core. One of the requirements is to create Azure AD users, there are a couple of problems found on the way.

First, when trying to use the GraphClient SDK I get these compilation errors:

Severity    Code    Description Project File    Line    Suppression State
Error   CS0012  The type 'IList<>' is defined in an assembly that is not referenced. 
You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.  PTIWebPortal.Packages.Cloud.DNX 4.6
D:\Eduardo\PTI Projects\PTIPortal\Portal\PTIPortal\PTIWebPortal.Packages.Cloud\CloudUserManager.cs  40  Active

That one happens when trying to set the OtherMails property of the object newUser.OtherMails = new System.Collections.Generic.List();

The other compilation error is

Severity    Code    Description Project File    Line    Suppression State
Error   CS0012  The type 'Uri' is defined in an assembly that is not referenced. 
You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.  
PTIWebPortal.Packages.Cloud.DNX 4.6 
D:\Eduardo\PTI Projects\PTIPortal\Portal\PTIPortal\PTIWebPortal.Packages.Cloud\CloudUserManager.cs  43  Active

This one happens when trying to instantiate the ActiveDirectoryClient ActiveDirectoryClient adClient = new ActiveDirectoryClient(serviceRoot, null);

I think these two are errores due to the SDKs not yet fully compatible with .NET Core, since there is already a Uri type which I'm already using which is a different version

// Generated by .NET Reflector from C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll

Я тратил слишком много времени на это, так что я решил попробовать использовать Microsoft Graph, но я постоянно получаю «Forbidden» ответ даже после добавления чтения и записи данных каталогов для применения в Azure AD это текущий код, который

public static readonly string CreateUserUrl = @"https://graph.microsoft.com/{0}/users";
public static async Task<UserInfo> CreateUser(string accessToken, UserInfo pUser)
        {
            using (var client = new HttpClient())
            {
                using (var request = new HttpRequestMessage(HttpMethod.Post, Settings.CreateUserUrl.v10Version()))
                {
                    request.Headers.Accept.Add(Json);
                    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
                    var userData = new
                    {
                        accountEnabled = true,
                        displayName = pUser.DisplayName,
                        mailNickname = pUser.Username,
                        passwordProfile = new
                        {
                            password = pUser.Password,
                            forceChangePasswordNextSignIn = false
                        },
                        userPrincipalName = string.Format("{0}@{1}", pUser.Username, pUser.Domain)
                    };
                    string serializedData = JsonConvert.SerializeObject(userData);
                    request.Content = new StringContent(serializedData, System.Text.Encoding.UTF8, "application/json");
                    //https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/users-operations
                    //http://stackoverflow.com/questions/35845541/microsoft-graph-rest-api-add-attachment-to-email-using-c-sharp-asp-net-mvc

                    using (var response = await client.SendAsync(request))
                    {
                        if (response.StatusCode == HttpStatusCode.OK)
                        {
                            var json = JObject.Parse(await response.Content.ReadAsStringAsync());
                            //myInfo.DisplayName = json?["displayName"]?.ToString();
                            //myInfo.MailAddress = json?["mail"]?.ToString().Trim().Replace(" ", string.Empty);
                            //myInfo.Department = json?["department"]?.ToString();
                            //myInfo.PhotoBytes = await GetUserPhotoAsync(accessToken, json?["userPrincipalName"]?.ToString());
                        }
                    }
                }
            }
            return pUser;
        }

Примечание: Я уже в состоянии войти в систему как Azure AD пользователя, и я также в состоянии получить информацию с помощью Microsoft Graph.

Любые идеи, что я мог сделать, чтобы решить одну из двух проблем?

  • Создание Azure AD пользователей с использованием .NET SDKs изнутри ядра приложения .NET
  • Решить «Запрещенный» проблему пытается создать пользователей с помощью Microsoft Graph

3 ответы

1

Чтобы исправить эту ошибку компиляции для «Тип„IList <>“определяется в сборке, которая не ссылается Вы должны добавить ссылку на сборку» вы должны добавить следующее в web.config:

<assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>

Это позволит решить первую ошибку.

Что касается второй ошибки, постарайтесь убедиться , чтобы установить правильные разрешения в вашем Azure регистрации AD , так как вы читать и писать разрешения.

Надеюсь это поможет.

3

Если добавить к этому project.json при зависимостях он должен решить проблему совместимости

"Microsoft.NETCore.Portable.Compatibility": "1.0.1"
1

Найдено решение первой задачи с использованием Azure SDK, пришлось добавить dependenci, но в разделе Famework Ассамблей в project.json

"frameworks": {
    "dnx46": {
      "dependencies": {
        "Microsoft.Azure.ActiveDirectory.GraphClient": "2.1.0",
        "Microsoft.Azure.Common": "2.1.0",
        "Microsoft.Azure.Management.Resources": "3.4.0-preview",
        "Microsoft.Azure.Management.Websites": "1.1.0-preview",
        "Microsoft.Azure.Gallery": "2.6.2-preview",
        "Microsoft.Azure.Common.Dependencies": "1.0.0",
        "Microsoft.WindowsAzure.Common": "1.4.1",
        "Microsoft.WindowsAzure.Management.MediaServices": "4.1.0",
        "Microsoft.WindowsAzure.Management.Storage": "5.1.1",
        "Microsoft.WindowsAzure.Management.Compute": "12.3.1",
        "Microsoft.WindowsAzure.Management.Libraries": "2.0.0",
        "WindowsAzure.MediaServices": "3.5.2",
        "windowsazure.mediaservices.extensions": "3.3.0",
        "Microsoft.IdentityModel.Clients.ActiveDirectory": "3.9.302261508-alpha",
        "Microsoft.Framework.WebEncoders": "1.0.0-beta8",
      },
      "frameworkAssemblies": {
        "System.Runtime": "4.0.20.0",
        "System.Threading.Tasks": "4.0.10.0"
      }
    }
  },