При получении согласия мне предлагается войти в свою учетную запись разработчика (но можно ли это пропустить?) - PullRequest
0 голосов
/ 02 мая 2020

Я работал над подключением к API DocuSign через веб-приложение Blazor. По большей части у меня все работает, кроме части согласия.

Для контекста моя текущая сборка в основном ссылается на https://github.com/docusign/docusign-csharp-client в качестве источника, и я изменил то, что Мне нужно было оттуда. Я включил примеры кода ниже. Кроме того, я хотел бы сказать, что я попробовал почти каждый c# поток авторизации, документированный DocuSign, и в каждом случае это также часть согласия, в которой я сталкиваюсь с проблемами.

Теперь, на указанную c проблема: когда я пытаюсь авторизовать согласие (см. Код ниже) с возвращенным Uri, мне предлагается войти в DocuSign с моей учетной записью разработчика. Это сбивает с толку меня, так как я не могу найти упоминания в их документации, что это должно произойти. Из того, что я могу сказать, пользователю следует предложить «Принять» или «Отклонить» согласие, но это все. Я могу только предположить, что ошибаюсь в своем понимании того, что должно произойти.

        public string GetAuthorizationURLforConsent()
        {
            // we set the api client in global config when we configured the client 
            ApiClient apiClient = Configuration.Default.ApiClient;

            // Give consent to your app
            // Adding signature as out scope.
            List<string> scopes = new List<string>
            {
                OAuth.Scope_SIGNATURE,
                OAuth.Scope_IMPERSONATION
            };

            Uri oauthLoginUrl = apiClient.GetAuthorizationUri(INTEGRATOR_KEY, scopes, REDIRECT_URI, OAuth.TOKEN, STATE);

            // create a new UriBuilder, which copies all fragments of the source URI
            UriBuilder newUriBuilder = new UriBuilder(oauthLoginUrl);

            // set the new host
            newUriBuilder.Host = "account-d.docusign.com";

            // get a Uri instance from the UriBuilder
            Uri newUri = newUriBuilder.Uri;

            //return oauthLoginUrl.AbsoluteUri;
            return newUri.AbsoluteUri;
        }

Вот в чем дело: если я просто пропущу часть согласия и продолжу движение в моем коде с помощью метода JWTAuthLogin, Я могу продолжить и закончить с успешным результатом (позже в коде пользователь будет успешно подписан в формате PDF на сайте DocuSign).

        public string JWTAuthLogin()
        {
            // we set the api client in global config when we configured the client 
            ApiClient apiClient = Configuration.Default.ApiClient;

            // ONE TIME STEP for granting consent
            // Update and Run the below Uri with your INTEGRATOR_KEY and REDIRECT_URI
            // Example authorization URI -> https://account-d.docusign.com/oauth/auth?
            // response_type =code&scope=signature%20impersonation&client_id=$INTEGRATOR_KEY&redirect_uri=$REDIRECT_URI"

            // OR Run the below method to get your app specific Uri generated for you...
            //string oauthLoginUrl = GetAuthorizationURLforConsent();
            // Once you give consent (one-time only) then you can continue with futher requests...

            string oAuthBasePath = "account-d.docusign.com"; // for demo the base path would have "-d"

            OAuth.OAuthToken tokenInfo = apiClient.RequestJWTUserToken(INTEGRATOR_KEY, USER_ID, oAuthBasePath, PRIVATE_KEY_BYTES, 1);

            OAuth.UserInfo userInfo = apiClient.GetUserInfo(tokenInfo.access_token);

            string accountId = string.Empty;

            foreach (var item in userInfo.Accounts)
            {
                if (item.IsDefault == "true")
                {
                    accountId = item.AccountId;
                    apiClient = new ApiClient(item.BaseUri + "/restapi");
                    break;
                }
            }

            return accountId;
        }

Я предполагаю, что мой вопрос: я понимаю течь правильно? Почему я должен войти в систему, чтобы получить согласие? Это ожидаемое поведение? Если это ожидаемое поведение, могу ли я пропустить это (не разозлив юристов DocuSign)? Может показаться, что я могу пропустить этот шаг на практике, но они упоминают, насколько важен этот шаг довольно часто, и я хотел бы следовать правильным процедурам.

Большое спасибо за потраченное время.

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Рекомендуемая альтернатива для каждого пользователя, который будет выдавать себя за ваше приложение, которому необходимо предоставить индивидуальное согласие, - это использовать Administrative Consent.

Для использования административного согласия:

  1. Ваша учетная запись должна иметь функцию «Управление доступом с помощью единого входа». (Но вам не нужно устанавливать SSO.)
  2. Ваши пользователи, которые будут выдавать себя за другого, должны иметь адреса электронной почты в домене электронной почты, который был заявлен с помощью инструмента администрирования DocuSign.

После выполнения вышесказанного вы как администратор можете дать согласие от имени своих пользователей. Не забудьте дать согласие как для signature, так и для impersonation областей.

0 голосов
/ 02 мая 2020

Согласие требуется только один раз для приложения / интеграции.

Давайте ответим на ваши вопросы:

  • Правильно ли я понимаю последовательность? Да, вы делаете.
  • Почему я должен войти в систему, чтобы получить согласие? Ну, как бы DocuSign узнать, кто согласен, если они не вошли в систему? согласие привязано к вашей индивидуальной учетной записи, и каждый пользователь должен дать согласие индивидуально.
  • Это ожидаемое поведение? да, это так.
  • Если это ожидаемое поведение, могу ли я пропустить это (не разозлив юристов DocuSign)? не уверен насчет юристов, но вы не можете пропустить это. Требуется только один раз. Как только пользователь дает согласие на приложение, и, если он не отменит его позже, ему не нужно делать это снова, когда-либо.

Подводя итог:

Согласие требуется только один раз для приложения / интеграции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...