Sohaib Iftikhar created ZEPPELIN-2539:
-----------------------------------------
Summary: /api/login called recursively for role based auth on login
Key: ZEPPELIN-2539
URL: https://issues.apache.org/jira/browse/ZEPPELIN-2539
Project: Zeppelin
Issue Type: Bug
Components: zeppelin-server
Affects Versions: 0.7.1
Reporter: Sohaib Iftikhar
Consider a scenario where a zeppelin-server secured using shiro and needs to
permit access to the web interfact to a select group of user using ldap groups.
The following shiro.ini should work in such a scenario.
```
[main]
ldapRealm = org.apache.zeppelin.realm.LdapRealm
ldapRealm.userDnTemplate = uid={0},ou=people,dc=my-company,dc=net
ldapRealm.searchBase = dc=my-company,dc=net
ldapRealm.userSearchBase = ou=people,dc=my-company,dc=net
ldapRealm.groupSearchBase = ou=groups,dc=my-company,dc=net
ldapRealm.contextFactory.url = ldaps://auth.my-company:636
ldapRealm.contextFactory.authenticationMechanism = simple
ldapRealm.userObjectClass = posixAccount
ldapRealm.groupObjectClass = posixGroup
ldapRealm.authorizationEnabled = true
ldapRealm.memberAttribute = memberUid
ldapRealm.memberAttributeValueTemplate=uid={0},ou=people,dc=my-company,dc=unbelievable-machine,dc=net
ldapRealm.rolesByGroup = USERS:admin
ldapRealm.userSearchAttributeName = uid
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
shiro.loginUrl = /api/login
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 86400000
securityManager.realms = $ldapRealm
[roles]
admin = *
[urls]
/api/version = anon
/** = authc, roles[admin]
```
On trying to log in the /api/login gets a 302 redirect to itself and fails.
This works fine when the roles condition is removed. A workaround for such a
scenario is:
```
/api/login = authc
/api/login/logout = authc
/api/security/ticket = authc, roles[admin] #To also secure websockets
/** = authc, roles[admin]
```
In this case the user can login but cannot use any api calls if he is part of
the group however on first login (before refreshing or call to
/security/ticket) the websockets still work and hence this is not foolproof.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)