Skip to content

Commit

Permalink
Remove comments, update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
teunis90 committed Nov 20, 2022
1 parent e9cb19c commit 3ae04a7
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 21 deletions.
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,16 @@
# keycloak-validate-otp-conditional

This plugin brings Conditional OTP to the Direct Grant.

Mix between native plugins:
- https://github.com/keycloak/keycloak/blob/bfce612641a70e106b20b136431f0e4046b5c37f/services/src/main/java/org/keycloak/authentication/authenticators/directgrant/ValidateOTP.java
- https://github.com/keycloak/keycloak/blob/bfce612641a70e106b20b136431f0e4046b5c37f/services/src/main/java/org/keycloak/authentication/authenticators/browser/ConditionalOtpFormAuthenticator.java

Inspired by: https://github.com/lukaszbudnik/keycloak-ip-authenticator

Use case:

- When IP whitelisting passes, set user attribute: `ip_based_otp_conditional=skip` else`ip_based_otp_conditional=force`
- Configure this module to be conditional on this user attribute (OTP control User Attribute)

Also see our extended version of [keycloak-ip-authenticator](https://github.com/Nextpertise/keycloak-ip-authenticator).
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,6 @@
* @version $Revision: 1 $
*/
public class ValidateOtpConditionalAuthenticator implements Authenticator, CredentialValidator<OTPCredentialProvider> {
// public static final ValidateOtpConditionalAuthenticator SINGLETON = new ValidateOtpConditionalAuthenticator();
// public static final String PROVIDER_ID = "direct-grant-validate-otp-conditional";

public static final String SKIP = "skip";

public static final String FORCE = "force";
Expand Down Expand Up @@ -334,41 +331,28 @@ public void setRequiredActions(KeycloakSession session, RealmModel realm, UserMo
}
}







//
//
@Override
public boolean requiresUser() {
return true;
}
//

@Override
public boolean configuredFor(KeycloakSession session, RealmModel realm, UserModel user) {
return getCredentialProvider(session).isConfiguredFor(realm, user);
}
//
// @Override
// public void setRequiredActions(KeycloakSession session, RealmModel realm, UserModel user) {
//
// }
//

public OTPCredentialProvider getCredentialProvider(KeycloakSession session) {
return (OTPCredentialProvider)session.getProvider(CredentialProvider.class, "keycloak-otp");
}
//

public Response errorResponse(int status, String error, String errorDescription) {
OAuth2ErrorRepresentation errorRep = new OAuth2ErrorRepresentation(error, errorDescription);
return Response.status(status).entity(errorRep).type(MediaType.APPLICATION_JSON_TYPE).build();
}
//

@Override
public void action(AuthenticationFlowContext context) {}
//

@Override
public void close() {

Expand Down

0 comments on commit 3ae04a7

Please sign in to comment.