2015-09-22 5 views
1

Я использую для создания внутренних приложений проверки подлинности windows asp.net, которые автоматически заполняют WindowsPrincipal, у которого есть утверждения о имени пользователя и некоторой информации о группе, которая, как я полагаю, поступает из Active Directory. Я установил Visual Studio 2015 и попытался создать веб-приложение ASP.NET 5, но Windows Authentication выделена серым цветом. Я изучаю аутентификацию на основе утверждений, а также понимаю, какие возможности перекрестной платформы ASP.NET 5 принесет в таблицу и что мне может потребоваться уйти от проверки подлинности Windows.Должен ли я использовать проверку подлинности Windows в ASP.NET 5?

Это внутреннее веб-приложение находится в домене Active Directory, хотя я бы предпочел не запрашивать у пользователя учетные данные, если это не требуется, поскольку это будет работать поверх IIS. Как должен Я получаю текущего пользователя? Нужно ли мне выбирать другой метод проверки подлинности и каким-то образом получать претензии от AD с помощью другого метода или проверка подлинности Windows по-прежнему является рекомендуемой опцией для этого сценария и будет доступна в конечном итоге?

ответ

1

Я еще не играл с v5, но я использую SSO, используя идентификатор Windows в своих приложениях для интрасети. Вы пробовали GenericPrincipal? Теперь мне любопытно, и мне нужно поговорить с моим работодателем о тестировании .NET 5 ...

Работая с GenericPrincipal и IIdentity, вы можете получить что-нибудь из активного каталога у пользователя, зарегистрированного в Windows.

Все это входит в мой класс сотрудников.

public Employee(Authenticate identity) 
{ 
    if (identity.IsAuthenticated) 
    { 
     // if the account exists, build the employee object 
     loadEmployee(identity as IIdentity); 
    } 
    else 
    { 
     // If the account cannot be found in Active Directory, throw an exception 
     throw new ArgumentOutOfRangeException(identity.Name, "Employee does not exist"); 
    } 
} 

private void loadEmployee(IIdentity identity) 
{ 
    // the domain name of the identity 
    string domain = identity.Name.Split('\\')[0]; 

    // the username of the identity 
    string username = identity.Name.Split('\\')[1]; 

    // Initializes a new context for the identity's domain 
    PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain); 

    // Initialize a principal using the domain context and the username of the identity 
    UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, username); 

    // Build a collection of all the underlying objects 
    var userProperties = ((DirectoryEntry)user.GetUnderlyingObject()).Properties; 

    // populate the employee objects properties 
    LastName = user.Surname; 
    FirstName = user.GivenName; 
    NtUserName = username; 
    GUID = user.Guid.ToString(); 
} 

В моем классе AuthenticationFilter я создаю свой IPrincipal.

//build the system's Identity and Principal 
var genIdentity = new GenericIdentity(employee.FirstName + " " + employee.LastName); 
var genPrincipal = new GenericPrincipal(genIdentity, roles[]); 
var identity = (IPrincipal)genPrincipal; 
context.User = identity; 

Надеюсь, это будет соответствовать тому, что вы ищите.

+0

Спасибо за ответ, сейчас я делаю что-то подобное в версии 4.5 и создаю индивидуальный идентификатор после получения исходного идентификатора из Windows Auth. Я не использую SSO. Я могу играть с взломом asp.net 5 сегодня, чтобы попытаться заставить Windows auth работать, но хотелось бы понять, должен ли я двигаться в направлении и попеременном направлении, или если поддержка будет встроена. –

+1

Обновление: я выбрал «Нет аутентификации» из новое диалоговое окно проекта, а затем в свойствах проекта на вкладке «Отладка» Параметры IIS Express. Я отключил анонимный auth и проверил windows auth. После этого новые свойства User и Context.User, доступные из класса Controller, автоматически заполняются заявками из AD, которые я привык видеть, прежде чем разрешать IIS передавать учетные данные домена пользователя в приложение. Я предполагаю, что я все еще могу перехватить конвейер для создания пользовательских требований поверх этого, но использую ли я AD право? Существуют ли идентификационные признаки AD, которые я не использую? –

+0

Я просто просмотрел проект dotnet проекта GitHub и не смог найти сборку System.DirectoryServices, которая говорит мне, что она еще не поддерживается. Этот ответ SO поддерживает эту мысль. http://stackoverflow.com/a/28021962/755908. Таким образом, несмотря на то, что вы создали свой проект для проверки подлинности Windows, вы не сможете использовать персонализированные заявки с помощью DirectoryServices в .Net 5. Однако после включения вы сможете реализовать SSO с помощью Active Directory. – Ian

Смежные вопросы