密钥斗篷执行流程

时间:2019-09-26 09:27:46

标签: keycloak

我对配置替代执行流程有些困惑。

我当前已配置以下内容。

Cookie                         <- Alternative
Username Password Form         <- Required
TOTP Configured?               <- Alternative
                OTP Form       <- Optional
No, SMS then                   <- Alternative
                SMS Auth       <- Optional

您可以猜测,如果未为用户配置OTP,我希望SMS身份验证触发。

目前看来,如果未配置OTP,则会跳过OTP表单,并且身份验证成功,并且会跳过SMS。有没有办法告诉密钥斗篷是否未配置OTP,然后配置了“ TOTP”?执行流程已失败,因此“否,那么短信”执行流程是否起作用?

(在源代码中,它看起来像context.success()如果未为用户配置OTP则被调用。)

我正在使用Keycloak 7.0.0

谢谢

斯图尔特

1 个答案:

答案 0 :(得分:0)

通常,顶级执行或子流对于浏览器流必须是替代性(如果您已经通过 Password &&(OTP || SMS),则Cookie足以在应用程序中进行身份验证)。从我的角度来看,流程应该是这样的:

import React, { useEffect, useState } from 'react';
import io from 'socket.io-client';
import 'dotenv/config';
import ChatInput from './ChatInput';
import Messages from './Messages';

function App() {
  const [messages, setMessages] = useState([]);

  const port = process.env.REACT_APP_SERVER_PORT;
  const socket = io(`http://localhost:${port}`);

  useEffect(() => {
    socket
      .emit('app:load', messageData => {
        setMessages(messages => [...messages, ...messageData]);
      })
      .on('message:new', newMessage => {
        setMessages(messages => [...messages, newMessage]);
      });
  }, []);

  const postMessage = input => {
    socket.emit('message:post', input);
  };

  return (
    <div className="App">
      <Messages messages={messages} />
      <ChatInput postMessage={postMessage} />
    </div>
  );
}

export default App;

因此,如果我们进入凭据验证阶段:我们必须通过密码验证,那么我们必须通过2FA身份验证者之一(OTP或SMS)。但是SMS和OTP身份验证器应该正确实现(可能您必须调整其源代码。请参阅keycloak src和Keycloak customization docs)。