Как создать единый вход с помощью Rally.RestApi.dll ?

StackOverflow https://stackoverflow.com//questions/21055043

  •  22-12-2019
  •  | 
  •  

Вопрос

До сих пор я читал, что Rally RestAPI не поддерживают вход в систему единого входа.Я считаю, что с января 2014 года это уже не так.Тот же API используется в надстройке Rally для Excel (вот ссылка для Надстройка Rally для Excel), которые поддерживают вход в систему единого входа.Могу ли я получить исходный код надстройки Rally Excel или, по крайней мере, кто-нибудь, пожалуйста, приведет пример единого входа с использованием Rally RestAPI?

Я хочу сделать точно то же самое, что делает функция экспорта Excel Addin, но хочу сделать в чистом приложении .net.

Это было полезно?

Решение

Я добавил руководство к C # Rest Api, которое объясняет, как выполнить проверку подлинности единого входа, как это делает Rally в плагине Excel.Я вставляю его сюда для удобства.

Спасибо, Скотт

Краткий инструктаж по ралли единого входа

API веб-служб Rally (WSAPI) изначально поддерживает только базовую аутентификацию.Используя базовую аутентификацию, сеансы WSAPI должны инициироваться с использованием имени пользователя и пароля, которые проверяются на соответствие списку имен пользователей и паролей, хранящихся непосредственно в Rally.Это работает нормально до тех пор, пока клиенты не начнут использовать Единый вход (SSO).Единый вход позволяет клиентам использовать единый общеорганизационный механизм аутентификации (например, LDAP или Active Directory) для управления учетными данными пользователей и паролями.До сих пор использование WSAPI с включенным SSO требовало, чтобы клиенты поддерживали дублирующий список пользователей ("белый" список) в Rally для всех пользователей, которые хотят использовать Rally WSAPI.Недавние изменения в Rally теперь позволяют пользователям WSAPI получать доступ к Rally, используя свои учетные данные единого входа, и избавляют от необходимости поддерживать этих пользователей в "белом" списке.

Примечание:Текущая реализация единого входа в Rally основана на спецификации SAML, которая требует, чтобы пользователь взаимодействовал с браузером для завершения аутентификации.Как таковой, этот метод требует от пользователя взаимодействия с браузером, поэтому он несовместим с безголовыми клиентами WSAPI, такими как те, которые синхронизируют Rally с VCS и инструментами отслеживания ошибок.

При инициировании соединения единого входа пользователь предоставляет URL-адрес, который запускает подтверждение единого входа с поставщиком услуг Rally (SP), позже с привлечением поставщика удостоверений личности клиента (IdP) и завершается тем, что Rally отвечает файлами cookie, которые представляют действительный аутентифицированный сеанс.Если этот аутентифицированный файл cookie сеанса включен в любые последующие вызовы WSAPI, Rally свяжет эти вызовы с аутентифицированным пользователем, и вызовы WSAPI будут аутентифицированы.Чтобы упростить получение доступа к аутентифицированному файлу cookie сеанса для целей вызовов WSAPI после успешной аутентификации SAML SSO, Rally ищет параметр, добавленный к исходному URL-адресу единого входа, который, если присутствует, вернет специальную веб-страницу, содержащую файл cookie сеанса в виде открытого текста, в качестве конечного продукта подтверждения единого входа.Пользователи могут использовать эти данные для создания файла cookie, который будет использоваться в последующих вызовах WSAPI.

Примечание:Приведенные ниже примеры URL-адресов (потенциально) относятся к внутренней реализации единого входа в Rally.Поскольку единый вход используется, чтобы позволить клиентам предоставлять свою собственную аутентификацию с использованием их собственной инфраструктуры единого входа (по крайней мере, части IdP), URL-адреса единого входа будут зависеть от конкретного клиента.Обратитесь к своему администратору Rally или в службу поддержки Rally за помощью по URL-адресам единого входа.

Исходный URL-адрес единого входа выглядит примерно так:

 https://sso.rallydev.com/sp/startSSO.ping?PartnerIdpId=pingidp.f4tech.com-29577

Специальным параметром является:

 TargetResource=https://us1.rallydev.com/slm/j_sso_security_check?noRedirect=true

Примечание:Эта пара имя / значение устанавливает RelayState единого входа в конкретной реализации единого входа Rally, используя PingIdentity в качестве поставщика единого входа.Другие поставщики единого входа могут иметь другое имя параметра, используемое для установки состояния ретрансляции.Например, некоторые поставщики единого входа используют RelayState в качестве имени параметра.В любом случае, значение всегда одно и то же (т.е.“https://us1.rallydev.com/slm/j_sso_security_check ?noRedirect=истина”)

Таким образом, полный URL-адрес будет выглядеть следующим образом:

 https://sso.rallydev.com/sp/startSSO.ping?PartnerIdpId=pingidp.f4tech.com-29577&TargetResource=https://us1.rallydev.com/slm/j_sso_security_check?noRedirect=true

Если пользователь перейдет по этому измененному URL-адресу единого входа, после проверки подлинности ему будет представлена веб-страница, содержащая следующее:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <title>SSO Token</title>
    </head>
    <body>
        <form>
            <input type="hidden" name="authCookieName" value="ZSESSIONID"/>
            <input type="hidden" name="authCookieValue" value="khkjhkhkhkhkjhh"/>
        </form>
    </body>
</html>

Если пользователь создаст файл cookie на основе данных, содержащихся на этой странице, и передаст этот файл cookie вместе со своими последующими вызовами WSAPI, эти вызовы будут успешно аутентифицированы.Обратите внимание, что необязательные данные cookie, такие как secure и path, должны быть выведены из вызова, выполненного для получения cookie, в соответствии со спецификацией IETF для файлов cookie.

Итак, основной процесс входа в Rally из интерфейса GUI (опять же, это не работает для безголовых сред) с целью выдачи вызовов WSAPI заключается в следующем:

  • Соберите URL-адрес единого входа от пользователя с помощью специального параметра, описанного выше.
  • Запустите браузер, указывающий на этот URL.
  • После завершения навигации удалите значения файлов cookie с возвращенной HTML-страницы.
  • Закройте браузер.
  • Создайте файл cookie на основе значений файлов cookie.
  • Сохраните этот файл cookie для последующего использования.
  • Отправляйте этот файл cookie со всеми последующими вызовами WSAPI.

Повторите этот процесс, если вызов a WSAPI завершится неудачей при проверке подлинности с использованием этого файла cookie.Помните, что срок действия этих файлов cookie истек, и вы должны быть готовы повторить неудачный вызов после повторной аутентификации, чтобы обеспечить бесперебойную работу пользователя.

Rally C # ReST API

Rally C # Rest API имеет механизм, интегрированный в его структуру подключения, чтобы упростить этот процесс для различных клиентов с графическим интерфейсом, включая автоматическую повторную аутентификацию после истечения времени ожидания сеанса.Это включает в себя методы для преобразования страницы токена в действительный файл cookie.Вызывающие пользователи этой библиотеки могут реализовать другие функции, такие как вывод необязательных данных cookie (таких как домен, путь, защищенный и порт хоста) для учета ситуаций (например, тестовых сред), когда Rally не возвращает полные данные cookie.

Подключение к Rally с помощью C # ReST API означает создание экземпляра RallyRestApi.Существуют два устаревших конструктора, которые предполагают базовую аутентификацию и принимают имя пользователя и пароль среди прочих параметров.При создании RallyRestApi с использованием одного из этих конструкторов всегда будет использоваться базовая аутентификация и никогда не будет использоваться единый вход.

Третий конструктор принимает только объект IConnectionInfo.Это предпочтительный способ получения RallyRestApi.Использование объекта IConnectionInfo для создания RallyRestApi позволяет вызывающей стороне указывать всю информацию о соединении в одном объекте, который может использоваться для обратных вызовов единого входа и совместного использования аутентификации между несколькими экземплярами RallyRestApi.

IConnectionInfo и ConnectionInfo

Чтобы облегчить проверку подлинности единого входа, C # ReST API представил интерфейс IConnectionInfo и класс ConnectionInfo.Эти классы представляют объект, который содержит настройки подключения и может инициировать и завершать сеанс аутентификации единого входа на основе браузера по запросу.Класс ConnectionInfo реализует все настройки подключения и имеет методы для преобразования целевой страницы Rally SSO в полезный файл cookie.Этот класс можно использовать как есть, если требуется только Базовая аутентификация.IConnectionInfo используется для обеспечения гибкости на случай, если вызывающий не хочет расширять или иным образом использовать ConnectionInfo.

При использовании IConnectionInfo для базовой аутентификации просто создайте новый ConnectionInfo и задайте соответствующие общедоступные поля.Используйте это для создания RallyRestApi.Любые ошибки аутентификации будут вызывать исключения.

Example:

var cInfo = new ConnectionInfo();
cInfo.UserName = "myName";
cInfo.Password = "pass";
cInfo.Server = new Uri("https://host.com");
cInfo.AuthType = Rally.RestApi.AuthorizationType.Basic;

var conn = new RallyRestApi(cInfo);

При использовании IConnectionInfo для единого входа вызывающий должен реализовать функцию DoSSOAuth().Ниже приведен аннотированный пример.

public class MyConnectionInfo : Rally.RestApi.ConnectionInfo
{
    public override void doSSOAuth()
    {
        // Launch a browser to the this.server URI.
        // The browser will close automatically if it successfully reaches the SSO landing page 
        // Users can cancel the SSO handshake
        // Abort if the handshake is successful, but didn't arrive at the SSO landing page
        var ssoDialog = new SSOAuthDialog(server);
        DialogResult result = ssoDialog.ShowDialog();
        if (result == DialogResult.Cancel)
            throw new Exception("SSO authorization canceled");
        else if (result == DialogResult.Abort)
            throw new Exception(ssoDialog.abortReason);

        // Parse the SSO landing page into a Cookie and save it
        AuthCookie = parseSSOLandingPage(ssoDialog.getBrowser().DocumentText);

        // Infer Cookie values from SO Landing Page URL if not set
        if (String.IsNullOrWhiteSpace(authCookie.Domain) || authCookie.Domain == "null")
            authCookie.Domain = ssoDialog.getBrowser().Url.Host;
        AuthCookie.Secure = String.Equals(ssoDialog.getBrowser().Url.Scheme,"https",StringComparison.InvariantCultureIgnoreCase);

        // Set a specific port port if the SSO Landing Page URL has one
        if (!ssoDialog.getBrowser().Url.IsDefaultPort)
            Port = ssoDialog.getBrowser().Url.Port;
    }
} 

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

public partial class SSOAuthDialog : Form
{
    public String abortReason;

    public SSOAuthDialog(Uri url)
    {
        InitializeComponent();
        webBrowser.Url = url;
    }

    private void documentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        // We have found the SSO Landing Page.
        if (webBrowser.DocumentText.Contains("authCookieName") && webBrowser.DocumentText.Contains("authCookieValue"))
        {
            Trace.TraceInformation("Found SSO authentication token on page: {0}", e.Url.AbsolutePath);
            DialogResult = DialogResult.OK;
            Close();
        }

        // We have landed on the Rally ALM page
        // This is usually caused by a bad URL 
        else if (webBrowser.DocumentText.Contains("window.FEATURE_TOGGLES"))
        {
            abortReason = String.Format("The SSO handshake was successful, but the 'RelayState' was not correctly set. Contact your administrator to obtain the correct URL parameter to set the SSO handshake 'RelayState' to: https://rally1.rallydev.com/slm/j_sso_security_check?noRedirect=true");
            Trace.TraceError(abortReason);
            DialogResult = DialogResult.Abort;
            Close();
        }
    }

    public WebBrowser getBrowser()
    {
        return webBrowser;
    }
}

SSO Example:

var cInfo = new MyConnectionInfo();
cInfo.Server = new Uri("https://host");
cInfo.AuthType = Rally.RestApi.AuthorizationType.SSO;

// This will cause an SSO authentication event
var conn = new RallyRestApi(cInfo);
// This will not b/c it will just use the auth Cookie already in cInfo
var conn2 = new RallyRestApi(cInfo);

При использовании IConnectionInfo для единого входа важно кэшировать объект IConnectionInfo, который вы отправляете для создания RallyRestApi.После успешного подтверждения единого входа полученный файл cookie авторизации сохраняется в объекте IConnectionInfo и будет использоваться для всех последующих вызовов WSAPI, выполняемых из этого объекта RallyRestApi.Если вам нужно создать другой объект RallyRestApi, используя тот же файл cookie аутентификации из ранее успешного входа в систему единого входа, просто создайте новый объект RallyRestApi с тем же объектом IConnectionInfo, и если присутствует файл cookie аутентификации, он будет использован.

Повторные попытки

Срок действия файлов cookie авторизации может истечь.C # ReST Api обнаружит просроченный файл cookie единого входа и инициирует новый сеанс входа в систему единого входа по мере необходимости для получения нового действительного файла cookie.

Вот и все, что от него требуется.

Другие советы

SSO в настоящее время не поддерживается нашими наборами.Мы используем некоторые особые хаки, чтобы заставить его работать на плагин Excel, но ничего с интерфейсом, который достаточно удобный для пользователя, чтобы поделиться с нашим сообществом разработчиков.

Мы работаем над решением OAUTH, которое должно делать такие проекты, как это намного легче сделать.Как только он отправляется, мы должны опубликовать блог, чтобы показать вам, какие функции у него есть.Моя личная надежда заключается в том, что все наши наборы набора инструментов будут иметь поддержку, чтобы сделать использование OAUTH Simple.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top