Я работал над подключением к 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)? Может показаться, что я могу пропустить этот шаг на практике, но они упоминают, насколько важен этот шаг довольно часто, и я хотел бы следовать правильным процедурам.
Большое спасибо за потраченное время.