Интеграция входа третьей стороны со страницы регистрации с IdentityServer4 и Angular 6 - «Не найдено подходящего состояния в хранилище» - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь внедрить стороннюю аутентификацию на своей странице регистрации, но не могу заставить ее работать с IdentityServer4.У меня это работает на моей странице входа в систему, так как клиент oidc инициирует запрос входа в систему.Однако клиент oidc не знает о запросе на мою страницу регистрации, поэтому, когда я отправляю токен авторизации обратно, он не распознает состояние и выдает исключение: «Не найдено соответствующее состояние в хранилище».

Я знаю, что IdentityServer4 официально не поддерживает регистрацию пользователей.У меня есть настроенная регистрация с ASP.Net Identity, но было бы неплохо иметь возможность добавить регистрацию [Сторонний поставщик] на моей странице регистрации.Есть ли способ, которым я могу обойти это?Могу ли я установить состояние вручную и отправить запрос на регистрацию моему провайдеру идентификации?Таким образом, если пользователь решит войти в систему, тогда клиент oidc будет иметь действительное состояние.Есть ли другой путь?Спасибо.

1 Ответ

0 голосов
/ 06 апреля 2019

Я наконец нашел решение этой проблемы.Как я уже говорил в своем ответе, клиент oidc сохраняет информацию о состоянии в локальном хранилище, чтобы он мог проверить, что он получил ответ от предполагаемого сервера.Вы можете имитировать это, генерируя безопасную случайную строку и сохраняя ее в localStorage.Сделайте это перед отправкой запроса на ваш сервер авторизации для регистрации нового пользователя.Код выглядит так:

    const nonce = this.generateUniqueString();
    const state = this.generateUniqueString();
    const date = new Date();

    const query = `${otherQueryOptions}&state=${state}&nonce=${nonce}`;

    const authSessionData = {
        authority: auth_server_url,
        client_id: client_id,
        created: date.getTime(),
        id: state,
        nonce: nonce,
        redirect_uri: `your/return.url`
    }

    // You must prefix the key with 'oidc'
    localStorage.setItem(`oidc.${authSessionData.id}`, JSON.stringify(authSessionData));
    const registrationPath = `myServerRegistrationPath?${query}`

    navigateToPage(registrationPath);

Это устранило проблему для меня.

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