Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ZEPPELIN-2796] Fetching LDAP roles #2498

Closed
wants to merge 4 commits into from
Closed

Conversation

herval
Copy link

@herval herval commented Jul 20, 2017

What is this PR for?

This actually fetches the user's LDAP roles, when using the LdapRealm, so they're accessible on Zeppelin (via the SecurityUtils).

As I debugged through it, I found some weird replacement code, so I wrote some tests around the LdapRealm and fixed what I believe was wrong there. Eg.: expandTemplate would expand, for instance, uid={0} into uid={0}yourusername.

In order to make the actual LDAP calls for roles, I exposed the queryForAuthorizationInfo method and used it on SecurityUtils.

What type of PR is it?

Bug Fix / Improvement

What is the Jira issue?

https://issues.apache.org/jira/browse/ZEPPELIN-2796

How should this be tested?

I tested this in our LDAP environment. My shiro.ini looked more or less like this:

[main]
ldapRealm = org.apache.zeppelin.realm.LdapRealm
ldapRealm.contextFactory.url = ldap://ldap.foo
ldapRealm.contextFactory.authenticationMechanism = simple
ldapRealm.userDnTemplate = uid={0},cn=users,dc=ods,dc=foo
ldapRealm.searchBase = dc=ods,dc=foo,dc=corp
ldapRealm.userSearchBase = cn=users,dc=ods,dc=foo
ldapRealm.groupSearchBase = cn=groups,dc=ods,dc=foo
ldapRealm.authorizationEnabled = true
ldapRealm.groupObjectClass = posixGroup
ldapRealm.memberAttribute = memberUid
ldapRealm.userObjectClass = posixAccount
ldapRealm.memberOfAttribute = memberOf
ldapReal.groupSearchFilter = '(memberUid={0})'
securityManager.realms = $ldapRealm
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 86400000
shiro.loginUrl = /api/login

[urls]
/api/version = anon
/api/metrics = anon
/api/interpreter/repository/** = authc
/api/configurations/** = authc
/api/credential/** = authc
/api/notebook-repositories = authc
# /** = anon
/** = authc

you can tell the role fetching worked inspecting the web call to /ticker, which will now return the full roles list

Screenshots (if appropriate)

Questions:

  • Does the licenses files need update?
  • Is there breaking changes for older versions?
  • Does this needs documentation?

@herval
Copy link
Author

herval commented Jul 24, 2017

Hi folks,

Any thoughts on this?

@herval
Copy link
Author

herval commented Sep 7, 2017

Hi folks,

Please let me know if I should close this. Tks!

@Leemoonsoo
Copy link
Member

Thanks @herval for the great contribution.

I'm not an expert on LDAP but it looks good to me while it includes test and passes CI.
If no further reviews from any other LDAP experienced people, i'll merge this to master.

@asfgit asfgit closed this in 554d7ba Oct 1, 2017
prabhjyotsingh pushed a commit to prabhjyotsingh/zeppelin that referenced this pull request Oct 23, 2017
### What is this PR for?

This actually fetches the user's LDAP roles, when using the LdapRealm, so they're accessible on Zeppelin (via the `SecurityUtils`).

As I debugged through it, I found some weird replacement code, so I wrote some tests around the `LdapRealm` and fixed what I believe was wrong there. Eg.: `expandTemplate` would expand, for instance, `uid={0}` into `uid={0}yourusername`.

In order to make the actual LDAP calls for roles, I exposed the `queryForAuthorizationInfo` method and used it on `SecurityUtils`.

### What type of PR is it?
Bug Fix / Improvement

### What is the Jira issue?
https://issues.apache.org/jira/browse/ZEPPELIN-2796

### How should this be tested?
I tested this in our LDAP environment. My shiro.ini looked more or less like this:

```
[main]
ldapRealm = org.apache.zeppelin.realm.LdapRealm
ldapRealm.contextFactory.url = ldap://ldap.foo
ldapRealm.contextFactory.authenticationMechanism = simple
ldapRealm.userDnTemplate = uid={0},cn=users,dc=ods,dc=foo
ldapRealm.searchBase = dc=ods,dc=foo,dc=corp
ldapRealm.userSearchBase = cn=users,dc=ods,dc=foo
ldapRealm.groupSearchBase = cn=groups,dc=ods,dc=foo
ldapRealm.authorizationEnabled = true
ldapRealm.groupObjectClass = posixGroup
ldapRealm.memberAttribute = memberUid
ldapRealm.userObjectClass = posixAccount
ldapRealm.memberOfAttribute = memberOf
ldapReal.groupSearchFilter = '(memberUid={0})'
securityManager.realms = $ldapRealm
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 86400000
shiro.loginUrl = /api/login

[urls]
/api/version = anon
/api/metrics = anon
/api/interpreter/repository/** = authc
/api/configurations/** = authc
/api/credential/** = authc
/api/notebook-repositories = authc
# /** = anon
/** = authc
```

you can tell the role fetching worked inspecting the web call to `/ticker`, which will now return the full roles list

### Screenshots (if appropriate)

### Questions:
* Does the licenses files need update?
* Is there breaking changes for older versions?
* Does this needs documentation?

Author: Herval Freire <hfreire@twitter.com>

Closes apache#2498 from herval/ldap-roles and squashes the following commits:

cfab47c [Herval Freire] fix test
9f2f5a0 [Herval Freire] add license/fix test
4d3ed58 [Herval Freire] expose roles from ldap + fix substitution code
ed1b0f8 [Herval Freire] expose roles from ldap + fix substitution code
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants