Android客户端无法使用Bearer-token来授权signalR请求

问题描述 投票:0回答:1

我正在尝试从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()方法上成功调用。

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

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

     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;
android authorization signalr signalr-hub bearer-token
1个回答
0
投票

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

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

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

例如

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

© www.soinside.com 2019 - 2024. All rights reserved.