Работа с __REQUESTDIGESTWork with __REQUESTDIGEST

К каждому запросу API SharePoint, отличному от GET REST, необходимо добавлять действительный дайджест.When executing non-GET REST requests to the SharePoint API, you must add a valid request digest to your request. Этот дайджест доказывает, что запрос к SharePoint является действительным.This digest proves validity of your request to SharePoint. Так как срок действия этого токена ограничен, необходимо убедиться, что токен действителен, прежде чем добавлять его к запросу. В противном случае запрос будет отклонен.Because this token is valid only for a limited period of time, you have to ensure that the token you have is valid before adding it to your request or the request fails.

На классических страницах SharePoint дайджест-токен запроса включается в скрытое поле с именем __REQUESTDIGEST.In classic pages, SharePoint includes a request digest token on the page in a hidden field named __REQUESTDIGEST. Часто дайджест извлекают из этого поля и добавляют к запросу, например:One of the most common approaches to work with the request digest is to obtain it from that field and add it to the request, for example:

var digest = $('#__REQUESTDIGEST').val();
$.ajax({
    url: '/_api/web/...'
    method: "POST",
    headers: {
        "Accept": "application/json; odata=nometadata",
        "X-RequestDigest": digest
    },
    success: function (data) {
      // ...
    },
    error: function (data, errorCode, errorMessage) {
      // ...
    }
});

Поначалу такой запрос будет работать, но если страница будет открыта долго, срок действия дайджеста запроса на странице истечет и возникнет ошибка 403 FORBIDDEN.Such a request would work initially, but if the user has the page open for a longer period of time, the request digest on the page expires and the request fails with a 403 FORBIDDEN result. По умолчанию срок действия дайджест-токена запроса составляет 30 минут, поэтому перед его использованием необходимо убедиться, что он еще действителен.By default, a request digest token is valid for 30 minutes, so before using it, you have to ensure that it's still valid. В прошлом это требовалось делать вручную, сравнивая метку времени из дайджеста запроса с текущим временем.In the past you had to do this manually, by comparing the timestamp from the request digest with the current time.

SharePoint Framework упрощает этот процесс, позволяя проверить, действителен ли дайджест-токен запроса одним из двух способов.SharePoint Framework simplifies this process by offering you two ways of ensuring that your request has a valid request digest token.

Использование класса SPHttpClient для связи с REST API SharePointUse the SPHttpClient to communicate with the SharePoint REST API

Рекомендуемый способ связи с REST API SharePoint — использование класса SPHttpClient, входящего в состав SharePoint Framework.The recommended way to communicate with the SharePoint REST API is to use the SPHttpClient provided with the SharePoint Framework. Этот класс представляет собой оболочку для отправки запросов REST к REST API SharePoint с удобной логикой, упрощающей код.This class wraps issuing REST requests to the SharePoint REST API with convenient logic that simplifies your code.

Например, при отправке отличного от GET запроса с помощью SPHttpClient автоматически возвращается действительный дайджест, который добавляется к запросу.For example, whenever you issue a non-GET request using the SPHttpClient, it automatically obtains a valid request digest and adds it to the request. Это значительно упрощает решение, так как вам не требуется писать код для управления дайджест-токенами запросов и проверять, являются ли они действительными.This significantly simplifies your solution because you don't need to build code to manage request digest tokens and ensure their validity.

При создании новых настроек на платформе SharePoint Framework следует всегда использовать класс SPHttpClient для работы с REST API SharePoint.If you're building new customizations on the SharePoint Framework, you should always use the SPHttpClient to communicate with the SharePoint REST API.

Но иногда может не быть возможности использовать SPHttpClient.Sometimes, however, you might not be able to use the SPHttpClient. Например, такая проблема может возникать при переносе имеющейся настройки на платформу SharePoint Framework, если требуется сохранить как можно больше первоначального кода, или при создании настроек с помощью таких библиотек, как Angular(JS), где предусмотрены собственные службы для отправки веб-запросов.This can be the case, for example, when you're migrating an existing customization to the SharePoint Framework and want to keep as much of the original code as possible, or you're building a customization by using a library such as Angular(JS) that has its own services for issuing web requests. В таких случаях действительный дайджест-токен запроса можно получить из службы DigestCache.In such cases you can obtain a valid request digest token from the DigestCache.

Получение действительного дайджеста запроса из службы DigestCacheRetrieve a valid request digest by using the DigestCache service

Если у вас нет возможности использовать класс SPHttpClient для работы с REST API SharePoint, то вы можете получить действительный дайджест-токен запроса из службы DigestCache, входящей в состав SharePoint Framework.If you can't use the SPHttpClient for communicating with the SharePoint REST API, you can obtain a valid request digest token by using the DigestCache service provided with the SharePoint Framework.

Преимущество использования службы DigestCache по сравнению с получением действительного дайджест-токена запроса вручную заключается в том, что DigestCache автоматически проверяет, действителен ли ранее полученный дайджест запроса.The benefit of using the DigestCache service over manually obtaining a valid request digest token is that the DigestCache automatically checks if the previously retrieved request digest is still valid. Если срок его действия истек, служба DigestCache автоматически запрашивает новый дайджест-токен из SharePoint и сохраняет его для последующих запросов.If it's expired, the DigestCache service automatically requests a new request digest token from SharePoint and stores it from subsequent requests. Использование DigestCache упрощает код и делает решение более надежным.Using the DigestCache simplifies your code and makes your solution more robust.

Использование службы DigestCache в кодеTo use the DigestCache service in your code

  1. Импортируйте типы DigestCache и IDigestCache из пакета @microsoft/sp-http:Import the DigestCache and IDigestCache types from the @microsoft/sp-http package:

    // ...
    import { IDigestCache, DigestCache } from '@microsoft/sp-http';
    
    export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloWorldWebPartProps> {
     // ...
    }
    
  2. Когда вам понадобится действительный дайджест-токен запроса, получите ссылку на службу DigestCache и вызовите ее метод fetchDigest:Whenever you need a valid request digest token, retrieve a reference to the DigestCache service, and call its fetchDigest method:

    // ...
    import { IDigestCache, DigestCache } from '@microsoft/sp-http';
    
    export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloWorldWebPartProps> {
     protected onInit(): Promise<void> {
       return new Promise<void>((resolve: () => void, reject: (error: any) => void): void => {
         const digestCache: IDigestCache = this.context.serviceScope.consume(DigestCache.serviceKey);
         digestCache.fetchDigest(this.context.pageContext.web.serverRelativeUrl).then((digest: string): void => {
           // use the digest here
           resolve();
         });
       });
     }
    
     // ...
    }
    

    См. такжеSee also