JAAS AuthN Tokens in uPortal and Beyond

advertisement
JAAS AuthN Tokens in uPortal
and Beyond
or “The JAAS Singer”
Our Environment
•
•
•
•
3 Campuses / 2 Environments
Tomcat 6.0.20
uPortal 3.1.1
Active Directory Kerberos authentication via
JAAS
Why Active Directory?
• AD offers authentication and group
management
• Many campus services use it for
authentication
• Kerberos implementation is widely used
Why JAAS?
•
•
•
•
Already part of Java
Kerberos implementation is solid
Works with our AD/Kerberos
uPortal has some JAAS support
EWS / uPortal
• Exchange Web Services (EWS) is a SOAP
interface to Microsoft Exchange.
• We were tasked with building a portlet to
retrieve a summary of Email and Calendar
items.
• Each item should be a link that takes the user
directly to it’s detailed view in Outlook Web
Access.
Parameters
• Utilize existing infrastructure.
• Secure and easily managed Authentication.
#1 Utilize Existing Infrastructure
• Both EWS and our uPortal instance
authenticates against the AD.
• EWS has a SOAP interface, Java supports SOAP
web services via JAX-WS.
• Some work was already started via
imap2exchange.
– Helped w/ JAX-WS bindings
– Utilizes BASIC authentication
#2 Secure, Easily Managed AuthN
• BASIC authN
• Admin user on Exchange server
• Secret keys between the portal and EWS
server
• Kerberos tickets?
Kerberos Tickets and SPNego!
• Krb tickets are generated by Active Directory
• Opaque and unique
• SPNego (Simple and Protected GSSAPI
NEGOtiation mechanism)
– Krb over HTTP
– Built in to EWS’ DNA
– Supported by all major browsers
uPortal and SPNego via JAAS/GSSAPI
• OOB JAASSecurityContext
– allows authN via JAAS
– does not hold on to the Kerberos ticket
• Thanks to uPortal being open source
– saw why it wasn’t
– more importantly, showed what had to happen to
make it hold on to it
• Implemented our own JAASSecurityContext
uPortal and SPNego via JAAS/GSSAPI
• Portlets need to be able to access this
attribute
– use the portlet API (PortletRequest.getAttribute)
– developed our own RequestAttributeService and
used the portlet container spring context file to
inject it into uPortal!
• Now, IPerson attributes are available to
portlets without needing any additional API.
Using the Kerberos Ticket
• Still faced a couple of challenges
– Generate a SPNego token
– put it on the HTTP header of the SOAP request the
right way
Enter JAASmine
• JAASmine was built out of frustration
– there are FEW good resources on GSSAPI/SPNego
usage in Java
– API is under-documented and tutorials are too
basic
– JAASmine takes what we learned and makes it
easy
JAASmine
• Lightweight “wrapper” for JAAS/GSSAPI
• Client code for web services that want to
authenticate using SPNego tokens
• Server code for handling verification and
validation of SPNego tokens
Success!
JAASmine and EWS authN
• From our portlet, we could get the kerberos
ticket
• Pass it to the JAASmine client to generate
SPNego
• Next, put it on the header of the HTTP SOAP
request (WWW-Authenticate)
Beyond uPortal
• JAASmine server components are used for
authenticating to our Kuali Rice instances
(both the web app and soon the SOAP
services)
• set up is low impact
– configure JAAS
– configure Kerberos
– configure a servlet filter
Beyond uPortal
• More web services
• Kerberos/Browser to server? It’s possible (and
ideal)…
References
•
•
•
•
SPNego - http://goo.gl/ECVHs
GSSAPI - http://goo.gl/XPLJF
JAASmine - http://goo.gl/DM2GD
imap2exchange - http://goo.gl/IkAZL
Thank You!
• Tim Carroll
• Andy Gherna
Download