放大 CUSTOM_AUTH 和 username/password 因 NotAuthorizedException 而失败
Amplify CUSTOM_AUTH along with username/password is failing with NotAuthorizedException
我正在尝试使用 CUSTOM_AUTH(从 vuejs 应用程序放大 js 库)username/password 通过自定义电子邮件 OTP 登录
我已将 authenticationFlowType 设置为 CUSTOM_AUTH
步骤如下-
- Auth.signIn(用户名, 密码)
- 这执行了 define auth challange lambda 的前 2 种情况
触发器
- 用于定义 auth challange lambda 的输入 json 如下所示
{
challengeName: 'SRP_A',
challengeResult: true,
challengeMetadata: null
},
{
challengeName: 'PASSWORD_VERIFIER',
challengeResult: true,
challengeMetadata: null
}
- 很明显,密码已通过验证。
- 它现在将挑战设置为 CUSTOM_CHALLANGE。
- 此时客户端失败并返回 NotAuthorizedException(不正确的用户名或密码)
要求挑战答案。
My define auth challange lambda is like this -
exports.handler = async (event, context) => {
console.log(event.request.session)
if (event.request.session.length == 1 && event.request.session[0].challengeName == 'SRP_A') {
event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = 'PASSWORD_VERIFIER';
}
else if (event.request.session.length == 2 && event.request.session[1].challengeName == 'PASSWORD_VERIFIER' && event.request.session[1].challengeResult == true) {
event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = 'CUSTOM_CHALLENGE';
}
else if (event.request.session.length == 3 && event.request.session[2].challengeName == 'CUSTOM_CHALLENGE' && event.request.session[2].challengeResult == true) {
event.response.issueTokens = true;
event.response.failAuthentication = false;
}
else {
console.log('Failing Authentication')
event.response.issueTokens = false;
event.response.failAuthentication = true;
}
context.done(null, event);
}
我的问题是,amplify 是否支持此功能?如果不行还有其他办法吗?
引用的文档 - https://docs.amplify.aws/lib/auth/switch-auth/q/platform/js#custom_auth-flow
这建议您不要提供密码,但这也不起作用。
我发现了问题。我的 create auth lambda 是错误的。我的 lambda 中的 if 语句是
如果 (!event.request.session || event.request.session.length === 0) {
但应该是
if (event.request.session.length === 2 && event.request.challengeName === 'CUSTOM_CHALLENGE') {
我在 if 语句之前的 create auth lambda 中有一个 console.log(event) 但它没有将日志写入云监视,这让我相信 lambda 没有被触发。我创建了一个新的 lambda 函数来修复日志记录问题。
我正在尝试使用 CUSTOM_AUTH(从 vuejs 应用程序放大 js 库)username/password 通过自定义电子邮件 OTP 登录
我已将 authenticationFlowType 设置为 CUSTOM_AUTH
步骤如下-
- Auth.signIn(用户名, 密码)
- 这执行了 define auth challange lambda 的前 2 种情况 触发器
- 用于定义 auth challange lambda 的输入 json 如下所示
{
challengeName: 'SRP_A',
challengeResult: true,
challengeMetadata: null
},
{
challengeName: 'PASSWORD_VERIFIER',
challengeResult: true,
challengeMetadata: null
}
- 很明显,密码已通过验证。
- 它现在将挑战设置为 CUSTOM_CHALLANGE。
- 此时客户端失败并返回 NotAuthorizedException(不正确的用户名或密码) 要求挑战答案。
My define auth challange lambda is like this -
exports.handler = async (event, context) => {
console.log(event.request.session)
if (event.request.session.length == 1 && event.request.session[0].challengeName == 'SRP_A') {
event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = 'PASSWORD_VERIFIER';
}
else if (event.request.session.length == 2 && event.request.session[1].challengeName == 'PASSWORD_VERIFIER' && event.request.session[1].challengeResult == true) {
event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = 'CUSTOM_CHALLENGE';
}
else if (event.request.session.length == 3 && event.request.session[2].challengeName == 'CUSTOM_CHALLENGE' && event.request.session[2].challengeResult == true) {
event.response.issueTokens = true;
event.response.failAuthentication = false;
}
else {
console.log('Failing Authentication')
event.response.issueTokens = false;
event.response.failAuthentication = true;
}
context.done(null, event);
}
我的问题是,amplify 是否支持此功能?如果不行还有其他办法吗?
引用的文档 - https://docs.amplify.aws/lib/auth/switch-auth/q/platform/js#custom_auth-flow
这建议您不要提供密码,但这也不起作用。
我发现了问题。我的 create auth lambda 是错误的。我的 lambda 中的 if 语句是 如果 (!event.request.session || event.request.session.length === 0) {
但应该是
if (event.request.session.length === 2 && event.request.challengeName === 'CUSTOM_CHALLENGE') {
我在 if 语句之前的 create auth lambda 中有一个 console.log(event) 但它没有将日志写入云监视,这让我相信 lambda 没有被触发。我创建了一个新的 lambda 函数来修复日志记录问题。