Авторизация пользователей надстроек, размещаемых у поставщика, во время выполнения с помощью OAuth
Предоставьте авторизованный доступ к ресурсам SharePoint с помощью OAuth в размещенных у поставщика надстройках во время выполнения.
Область применения: SharePoint 2013 | надстройки SharePoint | SharePoint Online
Пользователи могут получить доступ к надстройкам SharePoint, открыв сайт SharePoint, выбрав Содержимое сайта, а затем выбрав надстройку. SharePoint перенаправляет пользователей на удаленный веб-сайт, где выполняется надстройка, размещенная у поставщика. Так как пользователи получают доступ к надстройке из SharePoint, они авторизованы SharePoint, прежде чем они смогут получить доступ к надстройке.
Кроме того, если пользователи переходят непосредственно по URL-адресу надстройки, размещенной у поставщика, эта надстройка должна авторизовать их во время выполнения с помощью OAuth. В этом сценарии надстройка, размещенная у поставщика, должна обработать авторизацию, так как сначала пользователь не был авторизован SharePoint. В примере Core.DynamicPermissions показано, как динамически запрашивать разрешения с веб-сайта с помощью OAuth. Используйте это решение для следующих задач:
Авторизуйте пользователей, которые переходили непосредственно к надстройке, размещенной у поставщика, вместо доступа к надстройке из SharePoint. Например, вы не хотите, чтобы пользователи использовали пользовательский интерфейс SharePoint. Вместо этого пользователи могут использовать надстройку, размещенную у поставщика, которая отображает соответствующие данные, полученные из SharePoint.
Создайте надстройку, размещенную у поставщика, которая может проверять подлинность пользователей с помощью OAuth и продаваться через Магазин Office.
Подготовка к работе
Чтобы приступить к работе, скачайте пример надстройки Core.DynamicPermissions из проекта шаблоны и методики разработчика Office 365 на сайте GitHub.
Перед выполнением примера кода:
Убедитесь, что у вас есть разрешения на управление на сайте. Дополнительные сведения см. в статье Общие сведения об уровнях разрешений.
Зарегистрируйте надстройку на сайте SharePoint с помощью AppRegNew.aspx:
Перейдите к appregnew.aspx на сайте SharePoint. Например, если вы хотите использовать надстройку на сайте contoso.sharepoint.com, перейдите по адресу http://contoso.sharepoint.com/_layouts/15/appregnew.aspx.
Выберите Создать , чтобы создать новый идентификатор клиента.
Выберите Создать , чтобы создать новый секрет клиента.
Введите заголовок надстройки в поле Заголовок.
В поле Домен надстройки введите URL-адрес надстройки, размещенной у поставщика. Например, введите localhost.
В поле URI перенаправления введите URL-адрес надстройки, размещенной у поставщика. SharePoint перенаправит надстройку на этот URL-адрес после авторизации и предоставления согласия. Например, введите https://localhost:44363/Home/Callback. Доменное имя и номер порта можно получить из свойства URL-адреса SSL в проекте Core.DynamicPermissionsWeb в Visual Studio.
Выберите пункт Создать.
Скопируйте идентификатор клиента и секрет клиента в элемент appSettings в Core.DynamicPermissionsWeb\web.config.
Использование надстройки Core.DynamicPermissions
При выполнении примера кода:
В разделе Подключение к Office 365 введите URL-адрес сайта SharePoint, на который вы зарегистрировали надстройку, а затем нажмите кнопку Подключить. Например, введите https://contoso.sharepoint.com.
Войдите на сайт Office 365.
Если вам будет предложено предоставить согласие на разрешения, запрашиваемые надстройкой, выберите Доверять. Обратите внимание, что вы перенаправляетесь на страницу /_layouts/15/OAuthAuthorize.aspx.
Примечание.
Пользователь должен иметь разрешения на управление , чтобы предоставить согласие на разрешения, запрашиваемые надстройкой. Дополнительные сведения см. в статье Поток OAuth кода авторизации для надстроек SharePoint.
В поле Успешно подключено к Contoso введите имя нового списка, который нужно создать, а затем выберите Создать список.
Убедитесь, что в списке в Contoso отображаются все списки, принадлежащие сайту Contoso, отображается новый список.
При выборе подключенияпри подключении к Office 365 вызывается connect in Controllers\HomeController.cs, который затем вызывает TokenRepository.Connect . URL-адрес, введенный пользователем при подключении к Office 365, передается в TokenRepository.Connect в качестве hostUrl.
Примечание.
Код, приведенный в этой статье, предоставляется "как есть" без какой-либо явной или подразумеваемой гарантии, включая подразумеваемые гарантии пригодности для какой-либо цели, для продажи или гарантии отсутствия нарушения прав иных правообладателей.
public ActionResult Connect(string hostUrl)
{
TokenRepository repository = new TokenRepository(Request, Response);
repository.Connect(hostUrl);
return View();
}
TokenRepository.Connect вызывает TokenHelper.GetAuthorizationUrl . TokenHelper.GetAuthorizationUrl возвращает URL-адрес перенаправления в OAuthAuthorize.aspx, используя hostUrl и требуемые разрешения на ресурс SharePoint. OAuthAuthorize.aspx используется для авторизации пользователей с помощью OAuth. При перенаправлении на OAuthAuthorize.aspx пользователь должен войти в Office 365, а затем согласиться на разрешения, запрашиваемые надстройкой, или доверять надстройке. Для ресурса SharePoint требуется разрешение Web.Manage . После авторизации пользователя пример кода создает списки на сайте SharePoint. Для создания списков на сайте SharePoint у пользователей должны быть разрешения Web.Manage .
Примечание.
TokenHelper.GetAuthorizationUrl возвращает URL-адрес в форме https://contoso.sharepoint.com/_layouts/15/OAuthAuthorize.aspx?IsDlg=1&client_id=<Идентификатор> клиента&область=Web.Manage&response_type=code, где <идентификатор> клиента — это идентификатор клиента надстройки. Если надстройка зарегистрирована на панели мониторинга продаж, ее можно установить на любом сайте Office 365. Если надстройка не зарегистрирована на панели мониторинга продаж, необходимо зарегистрировать надстройку с помощью appregnew.aspx, а затем обновить Core.DynamicPermissionsWeb\web.config. Дополнительные сведения см.в статье Регистрация надстроек SharePoint 2013.
public void Connect(string hostUrl)
{
if (!IsConnectedToO365)
{
HttpCookie spHostUrlCookie = new HttpCookie("SPHostUrl");
spHostUrlCookie.Value = hostUrl;
spHostUrlCookie.Expires = DateTime.Now.AddYears(5);
_response.Cookies.Add(spHostUrlCookie);
_response.Redirect(TokenHelper.GetAuthorizationUrl(hostUrl, "Web.Manage"));
}
}
После авторизации надстройка перенаправляется на обратный вызов в Controllers\HomeController.cs, который является URI перенаправления, указанный в appregnew.aspx. TokenHelper передает код авторизации , код , в обратный вызов . Чтобы предоставить маркер доступа, описанный далее в этой статье, код авторизации , код , должен быть возвращен обратному вызову . Затем обратный вызов вызывает TokenRepository.Callback .
public ActionResult Callback(string code)
{
TokenRepository repository = new TokenRepository(Request, Response);
repository.Callback(code);
return RedirectToAction("Index");
}
TokenRepository.Callback вызывает TokenCache.UpdateCacheWithCode , который использует TokenHelper.GetAccessToken для получения маркера доступа OAuth на основе кода авторизации, кода .
public void Callback(string code)
{
HttpCookie spHostUrlCookie = _request.Cookies["SPHostUrl"];
if (null != spHostUrlCookie)
{
Uri sharePointSiteUrl = new Uri(spHostUrlCookie.Value);
TokenCache.UpdateCacheWithCode(_request, _response, sharePointSiteUrl);
}
}
public static void UpdateCacheWithCode(HttpRequestBase request, HttpResponseBase response, Uri targetUri)
{
string refreshToken = TokenHelper.GetAccessToken(request.QueryString["code"], "00000003-0000-0ff1-ce00-000000000000", targetUri.Authority, TokenHelper.GetRealmFromTargetUrl(targetUri), new Uri(request.Url.GetLeftPart(UriPartial.Path))).RefreshToken;
SetRefreshTokenCookie(response.Cookies, refreshToken);
SetRefreshTokenCookie(request.Cookies, refreshToken);
}
Теперь надстройка имеет маркер доступа для этого пользователя и может создавать списки на сайте SharePoint.