新的行动特点:建立你自己的自定义因素

105 阅读3分钟

我们很高兴地与大家分享,使用Auth0旗舰可扩展性产品Actions的客户,现在可以在他们的登录后流程中添加自定义提示或因素。这使开发人员和合作伙伴能够自信地记录在自定义重定向后返回时完成了一个因素。Auth0为开发者提供了更多的工具、功能和选项,使他们获得所需的支持和能力,通过专业的代码灵活性来定制客户的体验。

我们在自定义重定向成功后继续进行流程时,为登录后行动的API引入了一种新方法。这个方法允许客户和/或合作伙伴将该自定义因素的完成情况直接存储在用户的会话中。这一点的强大之处在于,他们可以在每次登录时检查该客户记录是否在用户会话中,如果它已经在那里,就跳过该提示。因为它存储在用户会话本身,所以它受益于Auth0产品中任何当前和未来的会话管理功能。

我们要解决的问题是什么?

历史上,客户没有很好的方法来使用Actions,以用户友好的方式安全地实现自定义提示或自定义因素。他们可以使用用户元数据或应用程序元数据,但这些对象存在于所有用户会话中。客户或合作伙伴也没有好的方法来查看特定设备上的用户是否已经完成了登录的必要因素。这意味着强迫用户重新执行自定义提示或因素的次数超过了需要。

举个例子,假设你是一个银行应用程序的开发者,它有一个特殊的要求,要使用一个自定义的多因素认证服务,而且你希望该认证与用户的会话和/或设备相关联,以增加安全性。这就是添加自定义提示的能力,使你能够建立客户体验并满足这一需求。

在真实的例子中看到它!

让我们来看看一个真实的例子!下面是一个实施自定义认证因素的合作伙伴集成的行动代码样本。

onExecutePostLogin ,我们通过使用Actions Redirect向用户发送带有会话令牌信息的客户方法URL来触发自定义认证方法。

const CUSTOM_METHOD_URL = "https://path.to.prompt";
const PROMPT_TTL = 1000 * 60 * 60 * 24; // 24h

exports.onExecutePostLogin = async (event, api) => {
    if (
        !event.authentication?.methods.some((record) => {
            // Timestamps are rendered as IS08601 strings
            const timestamp = new Date(record.timestamp);

            return (
                record.name === CUSTOM_METHOD_URL &&
                timestamp.value0f() >= Date.now() - PROMPT_TTL
            );
        })
    ){
        const sessionToken = api.redirect.encodeToken({
            payload: {
                user_id: event.user.user_id,
            },
            secret: event.secrets.SESSION_TOKEN_SECRET,
        });

        // Trigger our custom authentication method
        api.redirect.sendUserTo(CUSTOM_METHOD_URL, {
            query: { session token: sessionToken }
        });
    }
};

继续使用onContinuePostLogin ,我们验证会话令牌的秘密,并记录我们自定义认证方法的完成。

exports.onContinuePostLoqin = async (event, api) => {
    const payload = api.redirect.validateToken({
        secret: event.secrets. SESSION_TOKEN_SECRET,
        tokenParameterName: 'session_token'
    });

    if (!validateSessionToken(payload)) {
        return api.access.deny('Unauthorized');
    }

    // Record the completion of our custom authentication method.
    // THIS NEW API IS ONLY AVAILABLE IN 'onContinuePostLogin'
    api.authentication.recordMethod(CUSTOM_METHOD_URL);
};

function validateSessionToken(payload) {
    // Custom validation logic would go here
    return true;
}

Actions是一个我们不断改进的迭代平台。今天就开始创建你的Auth0 Actions,并通过与Auth0的无缝低代码集成来定制你的逻辑流程。