2013-06-17 4 views
1

Я пытаюсь сделать SSO для Office365 и объединил свой AD с Office365. Когда я перейду на портал.microsoftonline.com и введите имя пользователя из своего домена, например: [email protected], страница будет перенаправлена ​​на мою ADFS для аутентификации, после того, как пользовательские ключи в его/ее учетных данных.Office 365 Single Sign On

Есть ли способ сделать активную аутентификацию для Office365, если я правильно использую этот термин, когда пользователь регистрируется на моем сайте, который уже активно аутентифицирует пользователя, используя HttpBinding для моей ADFS, затем также получает аутентификацию для Office365?

Высокий уровень потока выглядит следующим образом:

  1. знаки пользователя в мой сайт, который аутентифицирован против ADFS с помощью активной аутентификации
  2. доходы пользователя в Office365 и не нужно снова войти в систему.

ответ

2

№ п. Для того чтобы SSO работала, cookie должен быть установлен в donain, где работает ADFS. И единственный способ добиться этого - аутентификация с помощью браузера. Когда вы выполняете активную аутентификацию, браузер не участвует (это вызов сервера на сервер)

+0

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

+0

Не уверен, можете ли вы. Но если y – woloski

0

Программно, используя IE и Powershell, вы можете сделать это с помощью COM-объекта, как показано ниже. Полный код для автоматического входа в систему (+ drivemap, что код из списка) здесь: http://www.lieben.nu/numb3rs/?page_id=129

#start invisible IE instance 
try{ 
    $ie = new-object -com InternetExplorer.Application 
    $ie.visible = $debugmode 
}catch{ 
    ac $logfile "failed to start Internet Explorer COM Object, check user permissions`n" 
    ac $logfile $error[0] 
    Exit 
} 
#navigate to OneDrive and log out 
$ie.navigate("http://login.microsoftonline.com/logout.srf") 
do {sleep 1} until (-not ($ie.Busy)) 
$ie.quit() 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ie) > $null 
Remove-Variable ie 

#start invisible IE instance 
$ie = new-object -com InternetExplorer.Application 
$ie.visible = $debugmode 

#login process 
do{ 
    $ie.navigate("https://"+$O365CustomerName+"-my.sharepoint.com/personal/"+$userURL") 
    do {sleep 1} until (-not ($ie.Busy)) 

    #click to open up the login menu 
    do {sleep 1} until (-not ($ie.Busy)) 
    try { 
     $ie.document.GetElementById("_link").click() 
     do {sleep 1} until (-not ($ie.Busy)) 
    } catch {$null} 

    #attempt automated login using ADFS/non ADFS methods 
    if($useADFS){ 
     ac $logfile "useADFS set to true`n" 
     ac $logfile "attempting ADFS single sign-on`n" 
     #trigger redirect 
     try{ 
      $ie.document.GetElementById("cred_keep_me_signed_in_checkbox").click() 
      $ie.document.GetElementById("cred_userid_inputtext").value = $userUPN 
      do {sleep 1} until (-not ($ie.Busy)) 
      $ie.document.GetElementById("cred_sign_in_button").click() 
      do {sleep 1} until (-not ($ie.Busy)) 
     }catch{ 
      ac $logfile "Failed to find the correct controls at $($ie.locationURL) to log in by script, check your browser and proxy settings or check for an update of this script`n" 
     } 
     #ADFS redirect can take a while 
     do {sleep 1} until (-not ($ie.Busy)) 
     Sleep -s1 
     do {sleep 1} until (-not ($ie.Busy)) 
     sleep -s $ADFSWaitTime 
     do {sleep 1} until (-not ($ie.Busy)) 
    }else{ 
     try{ 
      $ie.document.GetElementById("cred_userid_inputtext").value = $userUPN 
      $ie.document.GetElementById("cred_password_inputtext").value = $password 
      $ie.document.GetElementById("cred_keep_me_signed_in_checkbox").click() 
      do {sleep 1} until (-not ($ie.Busy)) 
      $ie.document.GetElementById("cred_sign_in_button").click() 
      do {sleep 1} until (-not ($ie.Busy)) 
     }catch{ 
      ac $logfile "Failed to find the correct controls at $($ie.locationURL) to log in by script, check your browser and proxy settings or check for an update of this script`n" 
     } 
     sleep -s 1 
     do {sleep 1} until (-not ($ie.Busy)) 
    }