android客户端无法使用Bearer-token

时间:2019-08-19 00:11:00

标签: android authorization signalr signalr-hub bearer-token

我正在尝试从Android客户端连接signalR。我已经安装了signalR集线器,并且它可以与浏览器上的javascript客户端一起正常使用。 javascript客户端能够发送承载令牌,并且在服务器端,我能够获取用户身份。 但是android java客户端无法发送承载令牌。我正在使用https://github.com/SignalR/java-client库(因为我没有使用SIgnalR-core,所以没有使用最新的SIgnalR核心库)

    connection = new HubConnection(serverUrl);
    connection.getHeaders().put("Authorization","Bearer XYZ");
    proxy = connection.createHubProxy(hubName);

运行此代码时,出现错误

    java.lang.InterruptedException: Operation was canceled

但是当我不随请求发送AUthorization标头时,则在服务器端SIgnalR OnConnected()方法上成功调用。

问题似乎与请求一起发送Authorization标头。

作为参考,下面的代码显示了如何在服务器端实现令牌认证

     app.Map("/signalr", map =>
        {
            map.UseCors(CorsOptions.AllowAll);
            map.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
            {
                Provider = new QueryStringOAuthBearerProvider()
            });
            var hubConfiguration = new HubConfiguration
            {
                Resolver = GlobalHost.DependencyResolver,
            };
            map.RunSignalR(hubConfiguration);
        });
        ConfigureAuth(app);

我尝试通过从服务器删除授权来调用它。然后成功调用。但是使用Authorization标头调用时不起作用。

当我尝试在没有授权的情况下进行连接时,则在服务器端OnConnected方法上调用了Context。身份为空。

用于连接到SignalR客户端的android Java代码

     Platform.loadPlatformComponent(new AndroidPlatformComponent());
    // Create Connection
    connection = new HubConnection(serverUrl);
    connection.getHeaders().put("Authorization","Bearer XYZ");
    // Create Proxy
    proxy = connection.createHubProxy(hubName);
    // Establish Connection
    ClientTransport clientTransport = new 
    ServerSentEventsTransport(connection.getLogger());
    SignalRFuture<Void> signalRFuture = connection.start(clientTransport);

    try {
        signalRFuture.get();
    } catch (InterruptedException e) {
        return false;
    } catch (ExecutionException e) {
        return false;
    }

    return true;

1 个答案:

答案 0 :(得分:0)

如果您使用的是Websocket,请尝试此操作

https://github.com/doctorcareanywhere/java-client

构建signalr-client-sdk并将jar导入您的项目

例如

实施文件('libs / signalr-client-sdk.jar')