Аутентификация Windows использует страницу входа по умолчанию вместо всплывающего диалога в Sharepoint 2010 - PullRequest
0 голосов
/ 31 октября 2011

Есть ли способ иметь простую аутентификацию Windows для общедоступного сайта (анонимный просмотр включен для просмотра страницы входа в систему), но вместо этого появляется диалоговое окно аутентификации Windows, чтобы использовать страницу входа (aspx).Я увидел нечто подобное, когда переключился на аутентификацию в смешанном режиме.В SharePoint есть выпадающий список «проверка подлинности Windows» или «проверка подлинности с помощью форм».Мне нужно что-то похожее, но только опция «проверка подлинности Windows».

Я видел похожие вопросы по SO, но все они связаны с созданием пользовательской страницы входа.Идеальное решение - без новых страниц и без кодирования.

Возможно ли это?

1 Ответ

1 голос
/ 11 декабря 2011

Это можно сделать, запустив адрес страницы sharepoint в Internet Explorer, и с помощью некоторого API-интерфейса pinvoke отправьте ключи или settext в поле входа в систему.

Я распространил эту настройку для приложения форм vb.net. Это работает на моем XP. Я еще не пробовал это в Windows 7, но я уверен, что для работы там нужны некоторые настройки.

Здесь используется библиотека WindowScraper, отсюда: http://www.programmersheaven.com/download/56171/download.aspx

В эту библиотеку встроена куча winapi и pinvoke. Если ваша сборка этого не допустит (возможно, потому что вы используете VS 2010), говоря, что у нее нет строгого имени, используйте SharpDevelop и пересоберите решение после добавления собственного сертификата.

Затем поместите dll в каталог вашего приложения и добавьте ссылку.

Затем добавьте импорт:

Imports WindowScrape
Imports WindowScrape.Constants
Imports WindowScrape.Types

Наконец, код (поместите все это в модуль или класс):

Частная собственность PortalAddress As String = "http://myportal@somewhere.com" Частная собственность logintitle As String = "Подключиться к myportal@somewhere.com"

Public Sub openPortal ()

If My.Computer.Info.OSFullName = "Microsoft Windows XP Professional" then 
    LoginToPortalXP()
Else
    msgbox("Someday, we will be able to log you in automatically" & vbCr & "But it isn't ready yet.")
End If
End Sub

Private Function IsWindowReady(Optional ByVal timeout As integer = 10000)
    Dim isready As Boolean = false
    Dim timer As Integer = 1000
    Do Until Not loginBox is nothing or timer = timeout
        Thread.Sleep(1000)
        loginbox = HwndObject.GetWindowByTitle(logintitle)
        timer = timer + 1000
    loop
    If Not loginbox is nothing then isready = true
    Return isready
End Function

Sub LoginToPortalXP()
    Try
        Dim TheBrowser As Object = CreateObject("InternetExplorer.Application")
        TheBrowser.Visible = True
        TheBrowser.Navigate(PortalAddress)
        If Not IsWindowReady then debug.print("failed") : Exit sub

        Dim sys As HwndObject = loginbox.GetChildren(1)   'SysCredential
        sys.GetChildren(1).Text = "myUserName"  'username box
        Thread.Sleep(500)
        sys.GetChildren(4).Text = "myPassword"   'password box
        Thread.Sleep(500)
        loginbox.GetChildren(2).Click()     'push the okay button
    Catch ex As Exception
        msgbox("ERROR AutoLogging into Portal: " & vbcr & & ex.Message)
    Finally        
    End Try
End Sub

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

...