[
https://issues.apache.org/jira/browse/KAFKA-1683?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14181696#comment-14181696
]
Gwen Shapira commented on KAFKA-1683:
-------------------------------------
Very good points [~jkreps] and [~joestein].
The way I read this - we should not rely on Session to maintain security. This
is too high of a risk and very much re-inventing the wheel. We should use
Session to maintain a generic user information, common to SASL, TLS and
delegation tokens, that the API handlers know how to use. This will basically
serve as the basis for the authorization layer.
The way GSS + JAAS work (and I'm pretty sure we want to use these for Kerberos)
- the client and server do a little authentication dance when the secured
connection is first established, and the client is left with input and output
streams that are secured. Everything sent and received on that socket
afterwards will be encrypted with the server key and include the client session
token. Decrypting the message and validating the client session token doesn't
require communicating with Kerberos, so while there is certain overhead, it
doesn't involve the network.
If we use this token to populate our Session object with every request, we can
be certain that the information is relevant to current connection and is
unexpired (It will be the client responsibility to renew the token with KRB
occasionally, this is per protocol).
This will be easier to do if we use a separate port for Kerberos connections,
they way we do for TLS, otherwise we'll need another way to figure out whether
to perform the little song-and-dance when accepting the connection. But we can
figure out this part later.
Meanwhile, Session object, populated by SocketServer when creating the request,
sent down to API layer. Since I like having the requestKey in the API, I'll add
the new Session object as an addition, not a replacement.
... and that was a very roundabout way to go back to the original request, but
I had to make sure this still makes sense to me :)
> Implement a "session" concept in the socket server
> --------------------------------------------------
>
> Key: KAFKA-1683
> URL: https://issues.apache.org/jira/browse/KAFKA-1683
> Project: Kafka
> Issue Type: Sub-task
> Components: security
> Affects Versions: 0.9.0
> Reporter: Jay Kreps
> Assignee: Gwen Shapira
>
> To implement authentication we need a way to keep track of some things
> between requests. The initial use for this would be remembering the
> authenticated user/principle info, but likely more uses would come up (for
> example we will also need to remember whether and which encryption or
> integrity measures are in place on the socket so we can wrap and unwrap
> writes and reads).
> I was thinking we could just add a Session object that might have a user
> field. The session object would need to get added to RequestChannel.Request
> so it is passed down to the API layer with each request.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)