c# Oauth2 без взаимодействия с пользователем
Я работаю над приложением, которое обновляет группу электронных таблиц. Я пытаюсь использовать «Приложение», которое имеет идентификатор клиента и секрет клиента для авторизации. Это будет выполняться через задание ETL с учетной записью службы. Однако каждый найденный мной пример кода (в том числе в SDK) показывает необходимость взаимодействия с пользователем. Например, если вы посмотрите на приведенный ниже код (это был пример из sdk, но у меня это почти то же самое), когда вы получаете URL-адрес авторизации, предположительно, пользователь должен принять приглашение, прежде чем вы сможете получить «код авторизации». ", что является обязательным. Если вы не взаимодействуете с подсказкой, вы просто получите ошибку Smartsheet.Api.OAuth.OAuthTokenException: «Запрос токена не выполнен с кодом ошибки http: Запрещено».
Любое направление, если есть что-то, связанное с кодированием, которое я должен включить, или если мне нужно использовать другой метод/маршрут, будет очень признателен.
Спасибо,
private static void UseOAuthFlow()
{
OAuthFlow oauth = new OAuthFlowBuilder()
.SetClientId("1tziajulcsbqsswgy37")
.SetClientSecret("sxouqll7zluvzmact3")
.SetRedirectURL("https://www.google.com")
.Build();
string url = oauth.NewAuthorizationURL
(
new Smartsheet.Api.OAuth.AccessScope[]
{
Smartsheet.Api.OAuth.AccessScope.READ_SHEETS,
Smartsheet.Api.OAuth.AccessScope.WRITE_SHEETS,
Smartsheet.Api.OAuth.AccessScope.SHARE_SHEETS,
Smartsheet.Api.OAuth.AccessScope.DELETE_SHEETS,
Smartsheet.Api.OAuth.AccessScope.CREATE_SHEETS,
Smartsheet.Api.OAuth.AccessScope.READ_USERS,
Smartsheet.Api.OAuth.AccessScope.ADMIN_USERS,
Smartsheet.Api.OAuth.AccessScope.ADMIN_SHEETS,
Smartsheet.Api.OAuth.AccessScope.ADMIN_WORKSPACES,
},
"key=Test"
);
// Take the user to the following URL
Debug.WriteLine(url);
// After the user accepts or declines the authorization they are taken to the redirect URL. The URL of the page
// the user is taken to can be used to generate an authorization RequestResult object.
string authorizationResponseURL = "https://www.google.com/?code=yn8kl1kvruh31uj&expires_in=599957&state=key=Test";
// On this page pass in the full URL of the page to create an authorizationResult object
AuthorizationResult authResult = oauth.ExtractAuthorizationResult(authorizationResponseURL);
// Get the token from the authorization result
Token token = oauth.ObtainNewToken(authResult);
Assert.IsTrue(token.AccessToken == "ACCESS_TOKEN");
Token tokenRefreshed = oauth.RefreshToken(token);
Assert.IsTrue(token.AccessToken != "ACCESS_TOKEN");
oauth.RevokeToken(token);
SmartsheetClient smartsheet = new SmartsheetBuilder().SetAccessToken(token.AccessToken).Build();
try
{
smartsheet.SheetResources.ListSheets(null, null);
Assert.Fail();
}
catch
{
}
}