Так что я не совсем понимаю, почему это не работает. Немного фона; У нас есть провайдер идентификации 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
.