Как разрешить моему веб-приложению Azure доступ к Active Directory? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть приложение WebForms, которое использует Active Directory для аутентификации и авторизации.Он прекрасно работает на локальном хосте, но завершается неудачно, когда я пытаюсь получить доступ к сайту после публикации в Azure.Я гарантировал, что приложение зарегистрировано в Azure Active Directory.Приложение запускается и работает как положено, если я не пытаюсь получить группы безопасности AD текущего пользователя.Вот код в событии Page_Load мастера сайта, который вызывает проблемы:

protected void Page_Load(object sender, EventArgs e)
    {
        PrincipalSearchResult<Principal> groups = UserPrincipal.Current.GetAuthorizationGroups();

        IEnumerable<string> groupNames = groups.Select(x => x.Name);

        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            HyperLink newphaud = LIV.FindControl("liaNewPhaud") as HyperLink;
            HtmlGenericControl liadmin = LIV.FindControl("navAdminsDdl") as HtmlGenericControl;

            newphaud.Visible = (groupNames.Contains("SG1") || groupNames.Contains("SG2"));

            liadmin.Visible = groupNames.Contains("SG1");
        }
    }

Вот подробности исключения:

System.Runtime.InteropServices.COMException:Запрещено.

Вот трассировка стека:

[COMException (0x80070005): Access is denied.
]
   System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +399115
   System.DirectoryServices.DirectoryEntry.Bind() +36
   System.DirectoryServices.DirectoryEntry.RefreshCache() +45
   System.DirectoryServices.AccountManagement.PrincipalContext.DoMachineInit() +211
   System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() +128
   System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() +31
   System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate) +14
   System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, IdentityType identityType, String identityValue) +90
   System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue) +32
   System.DirectoryServices.AccountManagement.UserPrincipal.get_Current() +191
   phaud.SiteMaster.Page_Load(Object sender, EventArgs e) in C:\Users\user1\source\repos\phaud\phaud\Site.Master.cs:19
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
   System.Web.UI.Control.OnLoad(EventArgs e) +95
   System.Web.UI.Control.LoadRecursive() +59
   System.Web.UI.Control.LoadRecursive() +131
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +678

Что мне нужно сделать, чтобы разрешить моему веб-приложению Azure доступ к AD?

1 Ответ

0 голосов
/ 09 октября 2018

Обратите внимание, что Azure AD! = Windows AD.Из кода видно, что ваше приложение обращается к локальной Windows AD.Поэтому, когда вы находитесь в Azure, у вас есть в основном два варианта: 1) использовать API-интерфейс Azure AD для аутентификации и получить информацию о пользователе; 2) у вас может быть отдельная виртуальная машина Windows с Windows AD, к которой затем будет обращаться ваше веб-приложение Azure.

На вашем месте я бы изучил первый вариант.Надеюсь, это поможет

...