Проверка подлинности Windows использует страницу входа по умолчанию вместо всплывающего диалога в Sharepoint 2010

#sharepoint-2010 #login #windows-authentication

#sharepoint-2010 #проверка подлинности #windows-проверка подлинности

Вопрос:

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

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

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

Ответ №1:

Это можно сделать, запустив адрес страницы sharepoint в Internet Explorer и используя некоторый pinvoke api для отправки ключей или 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
  

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

Адрес портала частной собственности в виде строки = «http://myportal@somewhere.com » Частное свойство logintitle в виде строки = «Подключиться к myportal@somewhere.com «

Открытый подпортал ()

 If My.Computer.Info.OSFullName = "Microsoft Windows XP Professional" then 
    LoginToPortalXP()
Else
    msgbox("Someday, we will be able to log you in automatically" amp; vbCr amp; "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: " amp; vbcr amp; amp; ex.Message)
    Finally        
    End Try
End Sub
  

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

Комментарии:

1. Привет, @BGM, спасибо за ответ. Однако я надеялся на что-то менее «хакерское», в котором использовалось больше встроенных функций. Возможно, ответа, который я ищу, на самом деле не существует. Несмотря на это, мне очень понравился креатив и подход, который вы выбрали, и повысили ответ. Но не думаю, что я пока могу дать окончательный ответ. Еще раз спасибо.

2. @mateuscb Ну, я хотел бы сказать, что я искал способы сделать это в течение нескольких лет. Единственный способ, который я нашел, — это «хакерский» способ. Я написал другой скрипт в autohotkey, который делает то же самое, но позволяет вам выбрать учетную запись для входа в систему, и он также работает в firefox. Описанный выше метод работает для dotnet и без чего-либо, кроме dotnet и api. На самом деле это работает очень хорошо. Единственным недостатком является то, что MS изменяет порядок элементов управления. Кроме того, я пробовал это только в XP и Sharepoint Services 2007; Я работаю над этим для Windows7.