Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблемы с Windows Authentication / 12 сообщений из 12, страница 1 из 1
07.09.2015, 11:29
    #39044714
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
День дорый,

Господа помогите плизз понять как решить следующую проблему...
Сайт с виндоус аутентификацией. Создал расширение для Identity.

Проблема в том что после публикации сайта на серваке имя перового пользователя определяется нормально.
А вот следующие пользователи получают имя первого ((

Почему так ... ни как понять не могу.



Global.asax

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    Private Sub MvcApplication_PostAuthenticateRequest(sender As Object, e As EventArgs) Handles Me.PostAuthenticateRequest

        Dim IdentityId As String = Context.User.Identity.IdentityId
        Dim IdentityName As String = Context.User.Identity.IdentityName
        Dim FirstName As String = Context.User.Identity.FirstName
        Dim LastName As String = Context.User.Identity.LastName
        Dim Email As String = Context.User.Identity.Email

        Dim CurrentPrincipal As New CustomWindowsPrincipal(DirectCast(User.Identity, WindowsIdentity), employee)

        HttpContext.Current.User = CurrentPrincipal

    End Sub




IdentityExtension

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Imports System.Runtime.CompilerServices
Imports System.Security.Claims
Imports System.Security.Principal

<Extension>
Public Module IdentityExtension

    Private _UserPrincipal As UserPrincipal
    Private _ClaimsIdentity As ClaimsIdentity
    Private _PrincipalContext As PrincipalContext

    Private _fullname As String
    Private _identityid As String
    Private _identityname As String
    Private _firstname As String
    Private _lastname As String
    Private _email As String

    <Extension>
    Public Function FullName(obj As IIdentity) As String

        If _fullname <> Nothing Then
            Return _fullname
        End If

        If _ClaimsIdentity Is Nothing Then
            _ClaimsIdentity = TryCast(obj, ClaimsIdentity)
        End If

        If _ClaimsIdentity Is Nothing Then
            Return Nothing
        End If

        If _PrincipalContext Is Nothing Then
            _PrincipalContext = New PrincipalContext(ContextType.Domain, "MYDOMAIN", Nothing, ContextOptions.Negotiate)
        End If

        If _PrincipalContext Is Nothing Then
            Return Nothing
        End If

        If _UserPrincipal Is Nothing Then
            _UserPrincipal = UserPrincipal.FindByIdentity(_PrincipalContext, IdentityType.SamAccountName, _ClaimsIdentity.Name)
        End If

        If _UserPrincipal Is Nothing Then
            Return Nothing
        End If

        _fullname = String.Format("{0} {1}", _UserPrincipal.GivenName, _UserPrincipal.Surname)

        Return _fullname

    End Function

etc...




CustomWindowsPrincipal

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Imports System.Security.Principal

Public Class CustomWindowsPrincipal
    Inherits WindowsPrincipal

    Public ReadOnly Property Employee As Employee

    Public Sub New(CurrentWindowsIdentity As WindowsIdentity, EmployeeParam As Employee)
        MyBase.New(CurrentWindowsIdentity)
        Employee = EmployeeParam
    End Sub

    Public Overrides Function IsInRole(role As String) As Boolean

        If Employee Is Nothing Then
            Return False
        End If

        If Employee.Roles.Count = 0 Then
            Return False
        End If

        If Employee.Roles.Where(Function(p) p.Name = role).Count = 0 Then
            Return False
        End If

        Return True

    End Function

End Class
...
Рейтинг: 0 / 0
07.09.2015, 11:42
    #39044729
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
Артем GПроблема в том что после публикации сайта на серваке имя перового пользователя определяется нормально.
А вот следующие пользователи получают имя первого ((
Не понятно ничего. Как при Windows аутентификации может быть первый и второй пользователь?
...
Рейтинг: 0 / 0
07.09.2015, 11:43
    #39044732
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
Код: c#
1.
Public Module IdentityExtension



а почему вы храните данные аутентифицированного пользователя в глобальном модуле? вот туда первый и прописывается, а дальше у вас по коду из локальных переменных считывается он же.
...
Рейтинг: 0 / 0
07.09.2015, 12:16
    #39044792
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
AxeleronАртем GПроблема в том что после публикации сайта на серваке имя перового пользователя определяется нормально.
А вот следующие пользователи получают имя первого ((
Не понятно ничего. Как при Windows аутентификации может быть первый и второй пользователь?


Сайт на сервере...

Я захожу на сайт со своего рабочего компа и вижу что я авторизовался как Артем.
Вася со своего рабочего компа заходит и тоже авторизовывается как Артем.

Почему так происходит я не понимаю ( ... как этому сделать дебаг не знаю (
Я новичек в вебе ... конкретно сейчас пишу на mvc. Отсюда такие сложности.
...
Рейтинг: 0 / 0
07.09.2015, 12:19
    #39044796
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
Артем G,
Konst_One Вам выше уже сказал почему скорее всего так происходит. Кто первый заходит на сайт, тот и будет считаться прилогиненым вне зависимости от действительного логина из-за имплементации IdentityExtension.
...
Рейтинг: 0 / 0
07.09.2015, 12:26
    #39044810
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
Konst_One
Код: c#
1.
Public Module IdentityExtension



а почему вы храните данные аутентифицированного пользователя в глобальном модуле? вот туда первый и прописывается, а дальше у вас по коду из локальных переменных считывается он же.

Спасибо за попытку помочь но не очень понятно ...


Сайт на серваке ...

ВОт вошел первый пользователь со своей рабочей станции
Запустилась вот эта часть кода Private Sub MvcApplication_PostAuthenticateRequest
И у него свой набор Identity

ВОт вошел второй пользователь со своей рабочей станции
Запустилась вот эта часть кода Private Sub MvcApplication_PostAuthenticateRequest
И у него свой набор Identity

Это не так?


PS
Public Module IdentityExtension - он отдельно от Global.asax. Расширяет Identity дополнительными свойствами как например FullName
...
Рейтинг: 0 / 0
07.09.2015, 12:28
    #39044812
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
сделайте отладку в файл и посмотрите куда и где у вас пропадает пользователь
...
Рейтинг: 0 / 0
07.09.2015, 12:28
    #39044813
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
Странность заключается в том что если мы все закроем браузеры и 1ый и 2ой пользователь и 2ой пользователь зайдет снова то он все равно авторизуется как 1ый.
...
Рейтинг: 0 / 0
07.09.2015, 12:29
    #39044817
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
Konst_Oneсделайте отладку в файл и посмотрите куда и где у вас пропадает пользователь

Подскажите плизз NLog должен здесь помочь? или что то другое? ...
...
Рейтинг: 0 / 0
07.09.2015, 12:32
    #39044824
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
Артем GСтранность заключается в том что если мы все закроем браузеры и 1ый и 2ой пользователь и 2ой пользователь зайдет снова то он все равно авторизуется как 1ый.

Спустя какое то время ... 2ой все же авторизовался под собой. Но теперь первый Авторизуется под 2ым.
...
Рейтинг: 0 / 0
07.09.2015, 12:32
    #39044825
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
Артем GKonst_Oneсделайте отладку в файл и посмотрите куда и где у вас пропадает пользователь

Подскажите плизз NLog должен здесь помочь? или что то другое? ...

NLog подойдёт

PS
проверьте ещё правильность настроек домена и IIS
http://www.codeproject.com/Articles/770347/On-Premise-Application-Identity-Windows-Authentica
...
Рейтинг: 0 / 0
07.09.2015, 13:15
    #39044870
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Windows Authentication
Правильно указали. Проблема оказалась действительно в переменных.

Теперь другая проблема - это медленно грузиться... потому как каждый раз приходиться создавать

Может подскажете как лучше выйти из данной ситуации?

Код: vbnet
1.
Dim _UserPrincipal As UserPrincipal = UserPrincipal.FindByIdentity(_PrincipalContext, IdentityType.SamAccountName, _ClaimsIdentity.Name)




Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Imports System.Runtime.CompilerServices
Imports System.Security.Claims
Imports System.Security.Principal

<Extension>
Public Module IdentityExtension

    <Extension>
    Public Function FullName(obj As IIdentity) As String

        Dim _ClaimsIdentity As ClaimsIdentity = TryCast(obj, ClaimsIdentity)

        If _ClaimsIdentity Is Nothing Then
            Return Nothing
        End If

        Dim _PrincipalContext As PrincipalContext = New PrincipalContext(ContextType.Domain, "MYDOMAIN", Nothing, ContextOptions.Negotiate)

        If _PrincipalContext Is Nothing Then
            Return Nothing
        End If

        Dim _UserPrincipal As UserPrincipal = UserPrincipal.FindByIdentity(_PrincipalContext, IdentityType.SamAccountName, _ClaimsIdentity.Name)

        If _UserPrincipal Is Nothing Then
            Return Nothing
        End If

        Return String.Format("{0} {1}", _UserPrincipal.GivenName, _UserPrincipal.Surname)

    End Function
End Module
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблемы с Windows Authentication / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]