In grado di autenticarsi per SharePoint Online a livello di programmazione con servizi federata

Io sono in grado di autenticarsi per SharePoint Online utilizzando SharePointOnlineCredentials, ricevere il messaggio di errore:

Identità Libreria di Runtime Client (IDCRL) si è verificato un errore mentre si parla di STS partner.

Questo stesso codice ha funzionato fino a quando abbiamo implementato AD FS per la federazione di autenticazione di Active Directory. E, infatti, il codice funziona ancora quando ho accesso il mio personale sito di SharePoint Online, che non fa uso di servizi federata. Questo mi porta a sospettare che ci sia un problema con SharePointOnlineCredential federate di servizi.

Qualcuno può confermare questo è il caso? E, se sì, qual è la soluzione?

Ho creato un semplice programma per verificare questo problema, che segue:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SharePoint.Client;
using Microsoft.Online.SharePoint.Client;
using System.Security;

namespace SPOConsole
{
    class Program
    {
        static void Main(string[] args)
        {

            var targetSite = new Uri("<https://<mydomain>.sharepoint.com>");
            var login = "<myuserid>@<mydomain>.com";
            var password = "<mypassword>";
            var securePassword = new SecureString();
            foreach (char c in password)
            {
                securePassword.AppendChar(c);
            }

            var onlineCredentials = new SharePointOnlineCredentials(login, securePassword);

            using (ClientContext clientContext = new ClientContext(targetSite))
            {
                clientContext.Credentials = onlineCredentials;
                Web web = clientContext.Web;
                clientContext.Load(web,
                webSite => webSite.Title);

                clientContext.ExecuteQuery();
                Console.WriteLine(web.Title);

                Console.Read();

            }

        }
    }
}

Non il codice sulla linea:

        var onlineCredentials = new SharePointOnlineCredentials(login, securePassword);

Che segue è la traccia dello stack:

Microsoft.SharePoint.Client.IdcrlException was unhandled
  HResult=-2147186451
  Message=Identity Client Runtime Library (IDCRL) encountered an error while talking to the partner STS.
  Source=Microsoft.SharePoint.Client.Runtime
  ErrorCode=-2147186451
  StackTrace:
       at Microsoft.SharePoint.Client.Idcrl.ManagedIdcrl.CheckHResult(Int32 hr)
       at Microsoft.SharePoint.Client.Idcrl.ManagedIdcrl.LogonIdentity(String username, SecureString password)
       at Microsoft.SharePoint.Client.Idcrl.SharePointOnlineAuthenticationProvider.Logon(String username, SecureString password)
       at Microsoft.SharePoint.Client.SharePointOnlineCredentials..ctor(String username, SecureString password)
       at SPOConsole.Program.Main(String[] args) in c:\Users\michael.norton\Documents\Visual Studio 2012\Projects\SimpleSPOConnection\SPOConsole\Program.cs:line 26
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 
InformationsquelleAutor Brite Shiny | 2014-05-05



3 Replies
  1. 7

    Ho risolto il problema assicurando stavo usando SharePoint Online i Componenti Client nel mio codice. Qui sono i passi che ho seguito:

    1. Disinstallato SharePoint Online Management Shell (http://www.microsoft.com/en-us/download/details.aspx?id=35588). Il programma originale, che è stato scritto lo scorso autunno e ha iniziato come un’estensione di un PowerShell programma, utilizzato il Microsoft.Online.SharePoint.Client.Tenant.dll che è venuto con SharePoint Online Management Shell. Il programma di riferimento C:\Program File\Client di SharePoint Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll.

    2. Installato l’ultima versione di SharePoint Online i Componenti Client SDK (http://www.microsoft.com/en-us/download/details.aspx?id=42038). È importante notare che questo SDK è diverso che SharePoint 2013 Componenti Client SDK. SharePoint Online i Componenti Client SDK è la versione 16; SharePoint 2013 Componenti Client SDK è la versione 15.

    3. Assicurato che la Microsoft.SharePoint.Client e Microsoft.SharePoint.Client.Le dll di Runtime del programma caricato dal 16 versione nella cartella Estensioni Server Web, ad esempio C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll.

    Sono ora in grado di autenticarsi utilizzando sia federato e non federate conti.

    • Nel punto 3, come hai fatto a garantire il diritto dll vengono caricate?
    • sono la versione 16 retrocompatibile con la versione 15? Se no come faccio a distribuire entrambe le versioni e l’uso di codice? Ho bisogno di caricare in modo dinamico il montaggio a seconda di che cosa istanza di sharepoint, l’utente è indirizzato dalla mia applicazione client?
    • Questo non sembra funzionare più. Ho i seguenti riferimenti: Microsoft.SharePoint.Client – versione: 16.1.0.0 versione del file: 16.1.4727.1200 Microsoft.SharePoint.Client.Runtime versione: 16.1.0.0 versione del file: 16.1.4727.1200 Ancora visualizzato il seguente errore quando faccio il login in un federati istanza di SharePoint Online, ma funziona in un “vanilla” del sito di SharePoint online “Libreria di Runtime (IDCRL) si è verificato un errore mentre si parla di STS partner”
  2. 1

    Massimiliano, è possibile utilizzare qualcosa come il seguente per aggiungere:

    $spoClientAssemblies = 
    'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll',
    'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll'
    
    foreach($reqAssembly in $spoClientAssemblies)
    {
        Add-Type -LiteralPath $reqAssembly -ErrorAction:Continue
    }

    È possibile anche verificare l’attuale dominio assemblee per la dll.

    [AppDomain]::CurrentDomain.GetAssemblies()
  3. 0

    È necessario per garantire che il carico richiesto di SharePoint Online assemblee in beginineg di script

    Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.dll" 
    
    Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.Runtime.dll"

Lascia un commento