Skip to content

Commit 2a9e275

Browse files
committed
Add implementation notes
1 parent 96d1fac commit 2a9e275

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

SECURITY-README.md

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,32 @@
1515
* limitations under the License.
1616
*/
1717

18-
#Shiro Authentication
18+
# Shiro Authentication
1919
To connect to Zeppelin, users will be asked to enter their credentials. Once logged, a user has access to all notes including other users notes.
2020
This a a first step toward full security as implemented by this pull request (https://github.com/apache/incubator-zeppelin/pull/53).
2121

22-
#Security setup
22+
# Security setup
2323
1. Secure the HTTP channel: Comment the line "/** = anon" and uncomment the line "/** = authcBasic" in the file conf/shiro.ini. Read more about he shiro.ini file format at the following URL http://shiro.apache.org/configuration.html#Configuration-INISections.
2424
2. Secure the Websocket channel : Set to property "zeppelin.anonymous.allowed" to "false" in the file conf/zeppelin-site.xml. You can start by renaming conf/zeppelin-site.xml.template to conf/zeppelin-site.xml
2525
3. Start Zeppelin : bin/zeppelin.sh
2626
4. point your browser to http://localhost:8080
2727
5. Login using one of the user/password combinations defined in the conf/shiro.ini file.
28-
28+
29+
# Implementation notes
30+
## Vocabulary
31+
username, owner and principal are used interchangeably to designate the currently authenticated user
32+
## What are we securing ?
33+
Zeppelin is basically a web application that spawn remote interpreters to run commands and return HTML fragments to be displayed on the user browser.
34+
The scope of this PR is to require credentials to access Zeppelin. To achieve this, we use Apache Shiro.
35+
## HTTP Endpoint security
36+
Apache Shiro sits as a servlet filter between the browser and the exposed services and handles the required authentication without any programming required. (See Apache Shiro for more info).
37+
## Websocket security
38+
Securing the HTTP endpoints is not enough, since Zeppelin also communicates with the browser through websockets. To secure this channel, we take the following approach:
39+
1. The browser on startup requests a ticket through HTTP
40+
2. The Apache Shiro Servlet filter handles the user auth
41+
3. Once the user is authenticated, a ticket is assigned to this user and the ticket is returned to the browser
42+
43+
All websockets communications require the username and ticket to be submitted by the browser. Upon receiving a websocket message, the server checks that the ticket received is the one assigned to the username through the HTTP request (step 3 above).
44+
2945

3046

0 commit comments

Comments
 (0)