Универсальная библиотека OAuth C # - PullRequest
0 голосов
/ 12 января 2012

Что я пытаюсь сделать:

Напишите Generic Library in C# для обработки OAuth Flow для каждой службы (так же, как Twitter, LinkedIn и Foursquare).Самое сложное в том, что я хочу simulate all the user input in code, чтобы не требовалось никаких действий пользователя, чтобы нажимать на кнопки типа «Хорошо, я позволю» или даже писать свое имя пользователя / пароль.

Сомнения, которые у меня есть до сих пор:

1 - Что такое использование authenticity_token в твиттерах API?

2 - Какие факторы используют все сервисы, так что яможет реализовать общее использование OAuth Flow.Например, я обнаружил, что первый шаг действительно легко сделать универсальным методом для выполнения.Все, что мне нужно сделать, это изменить URL-адрес для webRequest, и BAM, у меня есть токены запроса.

3 - Как получить верификатор для каждой услуги?Например, в LinkedIn Service мне удалось проанализировать страницу, чтобы получить это значение, но я не могу найти этот verifier для Twitter API, например.Даже при авторизации в браузере моего приложения я не вижу Verifier ни в одном HTML во время потока, ни в любом генерирующем его JavaScript.

Наблюдения:

1 - Iзнаю, что существует множество библиотек OAuth, например this или that , но нет библиотеки, которая позволяла бы мне делать то, что я хочу, то есть аутентифицировать и авторизоватьпользователь, без запроса какого-либо пользовательского ввода.

2 - я никоим образом не могу запросить ввод пользователя.Все значения, такие как имя пользователя и пароль для аутентификации, будут жестко закодированы, и каждый пользователь будет использовать одну и ту же учетную запись для этих запросов.

3 - я также знаю, что здесь есть другие посты, которые я написал,с почти такими же сомнениями, и причина, по которой я переписываюсь, состоит в том, чтобы попытаться сделать это более ясным и свежим.

4 - Заранее извините за любую английскую ошибку или неправильное понимание концепций.

Пример базового кода:

Это, например, метод, который я использую (который широко доступен за рубежом) для получения токенов запроса для любой услуги.Все, что мне нужно сделать, это изменить значение REQUEST_TOKEN на конкретный URL, который будет использоваться для службы, чтобы я мог получить токены для LinkedIn, Twitter или Foursquare, например.Но мне не удается применить тот же процесс на других этапах.

public string AuthorizationLinkGet()
    {
        string ret = null;

        string response = oAuthWebRequest(Method.GET, REQUEST_TOKEN, String.Empty);
        if (response.Length > 0)
        {
            //response contains token and token secret.  We only need the token.
            NameValueCollection qs = HttpUtility.ParseQueryString(response);

            if (qs["oauth_callback_confirmed"] != null)
            {
                if (qs["oauth_callback_confirmed"] != "true")
                {
                    throw new Exception("OAuth callback not confirmed.");
                }
            }

            if (qs["oauth_token"] != null)
            {
                ret = AUTHORIZE + "?oauth_token=" + qs["oauth_token"];
            }
        }
        return ret;
    }

1 Ответ

2 голосов
/ 12 января 2012

Не .

OAuth был разработан для того, чтобы пользователь нажимал эту кнопку один раз.Если вы автоматизируете его, ваш ключ приложения будет отозван, и ваша программа больше не будет работать.

Что вам нужно сделать, это локально сохранить токен авторизации и использовать его повторно.Пользователь нажимает «Я разрешаю» один раз, после чего вы повторно используете токен авторизации для будущих подключений.Вам нужно проверить, чтобы убедиться, что у него не истек срок действия, и если это так, вы просто повторно авторизуетесь, и они снова нажимают «I Allow».

Ни один веб-сайт, выполняющий OAuth правильно, не позволит вам обойти авторизацию веб-сайта,некоторые позволят вам передать имя пользователя и пароль с помощью запроса и получить токен, но если у них есть веб-авторизация, пользователь ДОЛЖЕН сделать это вручную.

Если вы являетесь поставщиком OAuth и потребителем, то вынужно сделать что-то, что Dropbox сделал для их v0 API (я не могу найти никаких ссылок на их старый API, если кто-то может найти его, отредактируйте этот пост), который передал имя пользователя и пароль на специальный адрес, который возвращал маркер авторизации безиспользуя веб-страницу.Или вам нужно использовать другую схему аутентификации, чем OAuth.

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