двухфакторная аутентификация с потоком пароля владельца ресурса spring oauth2

Можно ли реализовать двухфакторную аутентификацию с потоком паролей весенней присяги? Я думаю использовать http-фильтр на конечной точке /oauth/token. Предоставление моего токена доступа oauth выполняется через REST, поэтому весь процесс аутентификации будет спокойным.

Это будет мой собственный фильтр, но я не уверен, где его подключить:

 public class TwoFactorAuthenticationFilter extends UsernamePasswordAuthenticationFilter
{
 private String extraParameter = "extra";
 private String delimiter = ":";


/**
 * Given an {@link HttpServletRequest}, this method extracts the username and the extra input
 * values and returns a combined username string of those values separated by the delimiter
 * string.
 *
 * @param request The {@link HttpServletRequest} containing the HTTP request variables from
 *   which the username client domain values can be extracted
 */
@Override
protected String obtainUsername(HttpServletRequest request)
{
    String username = request.getParameter(getUsernameParameter());
    String extraInput = request.getParameter(getExtraParameter());

    String combinedUsername = username + getDelimiter() + extraInput;

    System.out.println("Combined username = " + combinedUsername);
    return combinedUsername;
}

/**
 * @return The parameter name which will be used to obtain the extra input from the login request
 */
public String getExtraParameter()
{
    return this.extraParameter;
}

/**
 * @param extraParameter The parameter name which will be used to obtain the extra input from the login request
 */
public void setExtraParameter(String extraParameter)
{
    this.extraParameter = extraParameter;
}

/**
 * @return The delimiter string used to separate the username and extra input values in the
 * string returned by <code>obtainUsername()</code>
 */
public String getDelimiter()
{
    return this.delimiter;
}

/**
 * @param delimiter The delimiter string used to separate the username and extra input values in the
 * string returned by <code>obtainUsername()</code>
 */
public void setDelimiter(String delimiter)
{
    this.delimiter = delimiter;
}

}


person Dean    schedule 21.04.2014    source источник
comment
Итак, я обнаружил, что ResourceOwnerPasswordTokenGranter ->getOAuth2Authentication — это метод, который экстраполирует имя пользователя и пароль, а затем вызывает диспетчер аутентификации. Есть ли способ предоставить свой собственный ResourceOwnerPasswordTokenGranter?   -  person Dean    schedule 22.04.2014
comment
Эта статья в основном решает проблему link   -  person Dean    schedule 23.04.2014