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
        {

        }
    }

0 ответов

Другие вопросы по тегам