Amplify federated saml вход без аутентификации - PullRequest
1 голос
/ 28 мая 2020

Так что я не совсем понимаю, почему это не работает. Немного фона; У нас есть провайдер идентификации SAML в нашем пуле пользователей, это зарегистрированный идентификатор в нашем пуле идентификаторов, который я вижу, когда я go на панели управления. Я очень разочарован отсутствием центральной документации по Amplify, невероятно сложно найти что-либо в Интернете, и я просто продолжаю пробовать то, что вижу, а они не работают.

То, что у меня уже есть:

У меня это уже работает в том смысле, что я получаю access_token обратно от провайдера SAML, и все работает нормально. Итак, я знаю, что он работает нормально (часть входа в систему), но проблема, с которой я столкнулся, в основном заключается в обновлении Amplify, чтобы теперь пользователь находился в сеансе, чтобы мы могли воспользоваться функциональностью в Amplify, которая позволяет обновлять токены sh по истечении срока их действия.

По сути, это поток, который я использую из разных источников, которые я нашел в Интернете:

await Auth.federatedSignIn({ provider });

эта строка кода может быть google , facebook или наш собственный SAML, который мы сделали. Я уже знаю, что это работает, снова b c, я уже получил свой токен доступа. Итак, вот где начинается мое замешательство. Очевидно, что этот вызов функции уведет пользователя со страницы, поэтому мы не можем await этот вызов, или я имею в виду, что вы можете, но он не вернет пользователя при перезагрузке страницы. Что нормально, эта часть имеет смысл. Итак, у меня есть функция при загрузке компонента, которая проверяет, есть ли access_token в URL-адресе ha sh, который также работает.

Теперь проблема в том, что Amplify не знает, что мы вошли в систему. Мы «вошли в систему» ​​в том смысле, что да, теперь у нас есть действующий токен JWT по URL-адресу ha sh access_token но местный Amplify не знает, что этот пользователь вошел в систему.

Итак, это то, о чем я говорю с отсутствием документации, возможно, я сумасшедший, но я не могу найти центральный источник того, как справиться с этим где угодно. Я подумал, как только у нас будет id_token, возможно, мы сможем воспользоваться преимуществами Amplify Auth federatedSignIn, но теперь вместо того, чтобы просто передавать поставщика, у них есть возможность отправить имя поставщика, токен идентификатора и время истечения срока действия. и пользовательский объект, как указано здесь

Как видите, есть разные способы использования этой функции, поэтому я полагаю, что теперь у меня есть id_token из ответа, я могу использовать этот метод, чтобы сообщить Amplify, что да, я действительно вошел в систему. Таким образом:

    await Auth.federatedSignIn(
      provider_name,
      {
        token: id_token,
        expires_at: expires_in,
      },
      user
    )

Когда это срабатывает, я получаю следующую ошибку:

issue with access token NotAuthorizedException: Invalid login token. Issuer doesn't match providerName

Теперь я на 100% проверил правильность имени providerName. Это ЖЕ имя провайдера, которое мы передаем в исходном вызове federatedSignIn. id_token также является jwt id_token, который мы получаем от Cognito и поставщика SSO. срок действия также 3600, поэтому я предполагаю, что это действительно так, и если бы это было не так, ошибка была бы другой. Я просто не понимаю, что мне нужно делать на данный момент.

Как я могу усилить распознавание федеративного пользователя, входящего в систему? Поскольку все, что мы получаем обратно, - это access_token, и я начинаю думать, что неправильно использую метод federatedSignIn.

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