2015-03-20 7 views
0

Я разрабатываю веб-приложение, использующее проверку подлинности Office 365.Аутентификация клиента Sharepoint

Мне нужно получить доступ к файлам sharepoint пользователей. Это приложение Multi-Tenant, это означает, что я не знаю URL-адрес Sharepoint, но я могу использовать API Microsoft Discover для обнаружения URL-адреса Sharepoint текущего пользователя.

Я хочу использовать файлы sharepoint, используя библиотеку Microsoft.Sharepoint.Client. Рассмотрим следующий код:

ClientContext context = new ClientContext("https://discoveredserver.sharepoint.com"); 

    // The SharePoint web at the URL. 
    Web web = context.Web; 

    // We want to retrieve the web's properties. 
    context.Load(web); 

У меня есть 403 не авторизовано, потому что клиентский объект не имеет учетных данных. Проблема в том, что я не могу установить учетные данные во время выполнения, потому что у меня его нет, единственное, что у меня есть, это токен-носитель, который позволяет подключиться к API-интерфейсу Sharepoint, используя авторизацию заголовка Http.

Есть ли способ установить токен-носитель в клиенте Sharepoint для вызова веб-служб SharePoint?

Спасибо!

ответ

0

Следующий пример демонстрирует, как явно указать однонаправленного Токен в ClientContext:

public static ClientContext GetClientContext(Uri webUri) 
{ 
    var ctx = new ClientContext(webUri); 
    ctx.ExecutingWebRequest += delegate(object sender, WebRequestEventArgs e) 
    { 
     string realm = TokenHelper.GetRealmFromTargetUrl(webUri); //get the realm 
     string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, webUri.Authority, realm).AccessToken; //get access token 
     e.WebRequestExecutor.WebRequest.Headers.Add("Authorization", "Bearer " + accessToken); 
    }; 
    return ctx; 
} 

Использование

using (var ctx = GetClientContext(webUri)) 
{ 
    ctx.Load(ctx.Web); 
    ctx.ExecuteQuery(); 
} 
0

Маркер доступа ACS на основе используемого поставщиком-размещаемое приложение SharePoint не может использоваться для других служб, таких как Служба обнаружения.

http://blogs.msdn.com/b/kaevans/archive/2015/03/20/an-architecture-for-sharepoint-apps-that-call-other-services.aspx

Если вам необходимо использовать Service Discovery или другие услуги, защищенные Azure AD, вам необходимо будет первым аутентификации пользователя с помощью Azure AD.

http://blogs.msdn.com/b/kaevans/archive/2015/03/23/using-openid-connect-with-sharepoint-apps.aspx

После проверки подлинности, необходимо запросить маркер доступа, специфичные для запрошенного ресурса. Мой пример показывает Exchange Online, но вы можете изменить это, чтобы легко использовать API SharePoint Online.

http://blogs.msdn.com/b/kaevans/archive/2015/03/23/call-o365-exchange-online-api-from-a-sharepoint-app.aspx