You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "stephen mallette (JIRA)" <ji...@apache.org> on 2015/09/28 23:59:04 UTC

[jira] [Comment Edited] (TINKERPOP3-855) sasl authentication type error due to Json format

    [ https://issues.apache.org/jira/browse/TINKERPOP3-855?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14934141#comment-14934141 ] 

stephen mallette edited comment on TINKERPOP3-855 at 9/28/15 9:58 PM:
----------------------------------------------------------------------

I have a feeling that this change won't work for gremlin-driver for plain {{application/json}} but maybe I'm wrong.  Try this test with it by adding it to {{GremlinServerAuthIntegrateTest}}:

{code}
@Test
public void shouldAuthenticateWithPlainTextOverJSONSerialization() throws Exception {
    final Cluster cluster = Cluster.build().serializer(Serializers.GRAPHSON).credentials("stephen", "password").create();
    final Client client = cluster.connect();

    try {
        assertEquals(2, client.submit("1+1").all().get().get(0).getInt());
        assertEquals(3, client.submit("1+2").all().get().get(0).getInt());
        assertEquals(4, client.submit("1+3").all().get().get(0).getInt());
    } finally {
        cluster.close();
    }
}
{code}


was (Author: spmallette):
I have a feeling that this change won't work for gremlin-driver for plain {{application/json}} but maybe I'm wrong.  Try this test with it by adding it to {{GremlinServerAuthIntegrateTest}}:

{code}
@Test
    public void shouldAuthenticateWithPlainTextOverJSONSerialization() throws Exception {
        final Cluster cluster = Cluster.build().serializer(Serializers.GRAPHSON).credentials("stephen", "password").create();
        final Client client = cluster.connect();

        try {
            assertEquals(2, client.submit("1+1").all().get().get(0).getInt());
            assertEquals(3, client.submit("1+2").all().get().get(0).getInt());
            assertEquals(4, client.submit("1+3").all().get().get(0).getInt());
        } finally {
            cluster.close();
        }
    }
{code}

> sasl authentication type error due to Json format
> -------------------------------------------------
>
>                 Key: TINKERPOP3-855
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP3-855
>             Project: TinkerPop 3
>          Issue Type: Bug
>          Components: server
>    Affects Versions: 3.0.1-incubating
>            Reporter: Dylan Millikin
>            Assignee: stephen mallette
>             Fix For: 3.1.0-incubating, 3.0.2-incubating
>
>
> The documentation states :
> {quote}The password should be an encoded sequence of UTF-8 bytes{quote}
> Thus the {{SaslAuthenticationHandler}} expects to receive a {{byte[]}} type var.
>  
> However, using gremlin-server with {{GraphSonMessageSerializer}}, if I send the payload with the sasl argument (say {{\x00stephen\x00password}}) in response to a gremlin-server {{407}} authentication challenge, I will get the following error:
> {code}
> java.lang.ClassCastException: java.lang.String cannot be cast to [B
> 	at org.apache.tinkerpop.gremlin.server.handler.SaslAuthenticationHandler.channelRead(SaslAuthenticationHandler.java:74)
> {code}
> This seems "normal" in that Json does not support any binary dataType and the sasl argument will automatically be converted to {{String}}.
> I quickly tested a correction locally by changing [this line|https://github.com/apache/incubator-tinkerpop/blob/tp30/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/handler/SaslAuthenticationHandler.java#L74] to :
> {code}
> final String saslString = (String) requestMessage.getArgs().get(Tokens.ARGS_SASL);
> final byte[] saslResponse = saslString.getBytes(Charset.forName("UTF-8"));{code}
> This is clearly a breaking change, but it solved the Json issue. 
> If you have any ideas on the way you want to go with this (or If I'm totally doing something wrong) let me know. I could probably make a PR for this.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)