Alon Bar-Lev has posted comments on this change.

Change subject: aaa : Add engine sso
......................................................................


Patch Set 62:

(10 comments)

https://gerrit.ovirt.org/#/c/36119/62/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/OAuthTokenServlet.java
File 
backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/OAuthTokenServlet.java:

Line 29:             throws ServletException, IOException {
Line 30:         try {
Line 31:             log.debug("Entered OAuthTokenServlet Query String: {}", 
request.getQueryString());
Line 32:             String clientId = SSOUtils.getRequestParameter(request, 
SSOUtils.CLIENT_ID, "CLIENT_ID");
Line 33:             String clientSecret = 
SSOUtils.getRequestParameter(request, SSOUtils.CLIENT_SECRET, "CLIENT_SECRET");
same, authorization headers.
Line 34:             String grantType = SSOUtils.getRequestParameter(request, 
SSOUtils.GRANT_TYPE, SSOUtils.GRANT_TYPE);
Line 35:             String scope = SSOUtils.getRequestParameter(request, 
SSOUtils.SCOPE, SSOUtils.SCOPE);
Line 36:             String redirectUri = SSOUtils.getRequestParameter(request, 
SSOUtils.REDIRECT_URI, SSOUtils.REDIRECT_URI);
Line 37: 


Line 43:                     break;
Line 44:                 case "password":
Line 45:                     issueTokenForPasswd(request, response, 
redirectUri);
Line 46:                     break;
Line 47:                 default:
please do not use default in security aware application, default should send an 
error.
Line 48:                     issueTokenUsingHttpHeaders(request, response, 
redirectUri);
Line 49:             }
Line 50:         } catch(OAuthException ex) {
Line 51:             SSOUtils.sendJsonDataWithMessage(response, ex);


Line 44:                 case "password":
Line 45:                     issueTokenForPasswd(request, response, 
redirectUri);
Line 46:                     break;
Line 47:                 default:
Line 48:                     issueTokenUsingHttpHeaders(request, response, 
redirectUri);
always use break... to avoid reordering issues.
Line 49:             }
Line 50:         } catch(OAuthException ex) {
Line 51:             SSOUtils.sendJsonDataWithMessage(response, ex);
Line 52:         } catch(AuthenticationException ex) {


Line 60:     }
Line 61: 
Line 62:     private static void issueTokenForAuthCode(HttpServletRequest 
request, HttpServletResponse response, String redirectUri) throws Exception {
Line 63:         log.debug("Entered issueTokenForAuthCode");
Line 64:         String code = SSOUtils.getRequestParameter(request, 
SSOUtils.AUTHORIZATION_CODE, SSOUtils.AUTHORIZATION_CODE);
must check that code was issued for this specific client.
Line 65:         Map<String, Object> sessionData = 
SSOUtils.getSessionData(request.getServletContext(), code);
Line 66:         log.debug("Sending json response");
Line 67:         SSOUtils.sendJsonData(response, buildResponse(sessionData));
Line 68:     }


Line 75:                     SSOUtils.getRequestParameter(request, "password", 
"password"),
Line 76:                     (SSOConfig) 
request.getServletContext().getAttribute(SSOUtils.SSO_CONFIG));
Line 77:             String code = null;
Line 78:             if (credentials != null && credentials.isValid()) {
Line 79:                 code = AuthenticationUtils.handleCredentials(request, 
false, credentials);
you do not need code in this case, maybe better to modify the session data to 
be based on token not code.
Line 80:             }
Line 81:             Map<String, Object> sessionData = 
SSOUtils.getSessionData(request.getServletContext(), code);
Line 82:             log.debug("Sending json response");
Line 83:             SSOUtils.sendJsonData(response, 
buildResponse(sessionData));


Line 89:     private static void issueTokenUsingHttpHeaders(HttpServletRequest 
request, HttpServletResponse response, String redirectUri) throws Exception {
Line 90:         log.debug("Entered issueTokenUsingHttpHeaders");
Line 91:         Credentials credentials = null;
Line 92:         try {
Line 93:             String code = ExternalAuthUtils.doAuth(request, response, 
false);
again, there is no code in this case, only token.

and, this external authentication can be negotiation using multiple iterations 
with remote, so you need to run until exhausted all options.
Line 94:             if (StringUtils.isEmpty(code)) {
Line 95:                 log.debug("External auth failed trying basic auth");
Line 96:                 credentials = 
SSOUtils.getUserCredentialsFromHeader(request);
Line 97:                 if (credentials != null && credentials.isValid()) {


Line 112:         Map<String, Object> payload = new HashMap<>();
Line 113:         payload.put(SSOUtils.ACCESS_TOKEN, 
sessionData.get(SSOUtils.ACCESS_TOKEN));
Line 114:         payload.put(SSOUtils.SCOPE, sessionData.get(SSOUtils.SCOPE));
Line 115:         payload.put(SSOUtils.EXPIRES_IN, 
sessionData.get(SSOUtils.VALID_TO));
Line 116:         payload.put("token_type", "bearer");
why do you mix constants and primitives? well, I know I prefer primitives... 
but... :)
Line 117:         return payload;
Line 118:     }


https://gerrit.ovirt.org/#/c/36119/62/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/SSOContextListener.java
File 
backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/SSOContextListener.java:

Line 28:         config.setSsoExtensionsManager(new 
SSOExtensionsManager(config.getDbUtils(), localConfig));
Line 29:         config.setSsoLocalConfig(localConfig);
Line 30: 
Line 31:         AuthenticationProfileRepository repo = new 
AuthenticationProfileRepository(config.getSsoExtensionsManager());
Line 32:         ctx.setAttribute(SSOUtils.AUTH_PROFILE_REPOSITORY, repo);
not sure you need the repo temp var.
Line 33: 
Line 34:         ctx.setAttribute(SSOUtils.SSO_CONFIG, config);
Line 35: 
Line 36:         try {


https://gerrit.ovirt.org/#/c/36119/62/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/SSOSessionListener.java
File 
backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/SSOSessionListener.java:

Line 22:             if (StringUtils.isNotEmpty(accessToken)) {
Line 23:                 ((Map<String, Map>) 
se.getSession().getServletContext().getAttribute(SSOUtils.SSO_ACCESS_TOKEN_AUTH_CODE_MAP)).remove(accessToken);
Line 24:             }
Line 25:             ((Map<String, Map>) 
se.getSession().getServletContext().getAttribute(SSOUtils.SSO_SESSION_DATA)).remove(authCode);
Line 26:         }
unrelated question... when do we expire sessions when the valid-to is reached?
Line 27:     }


https://gerrit.ovirt.org/#/c/36119/62/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/utils/SSOUtils.java
File 
backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/utils/SSOUtils.java:

Line 349:             if (!Boolean.parseBoolean(clientInfo.get(TRUSTED))) {
Line 350:                 throw new OAuthException(ERR_CODE_ACCESS_DENIED, 
ERR_CODE_ACCESS_DENIED_MSG);
Line 351:             }
Line 352: 
Line 353:             if (StringUtils.isNotEmpty(clientSecret) && 
!clientInfo.get(CLIENT_SECRET).equals(clientSecret)) {
the client secret should be a PBE not plain, I guess you left it for future, 
please add TODO comments for these cases.
Line 354:                 throw new OAuthException(ERR_CODE_INVALID_REQUEST, 
ERR_CODE_INVALID_REQUEST_MSG);
Line 355:             }
Line 356: 
Line 357:             if (StringUtils.isNotEmpty(scope)) {


-- 
To view, visit https://gerrit.ovirt.org/36119
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I4894fc12653027271b6abd4dd5313b10593703fa
Gerrit-PatchSet: 62
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <rn...@redhat.com>
Gerrit-Reviewer: Alon Bar-Lev <alo...@redhat.com>
Gerrit-Reviewer: Jenkins CI
Gerrit-Reviewer: Oved Ourfali <oourf...@redhat.com>
Gerrit-Reviewer: Ravi Nori <rn...@redhat.com>
Gerrit-Reviewer: automat...@ovirt.org
Gerrit-HasComments: Yes
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to