SignalR Core Android 客户端,带有返回 NULL 的 JWT 身份验证



我正在构建一个与核心 signalR 集线器通信的 android 应用程序 asp.net ,没有身份验证一切都很好,实际上我无法弄清楚。 在Web APi中,我使用JWT进行身份验证并将其作为访问令牌发送回Android设备,那么如何将令牌发送到集线器? 我在文档中找到了这段代码:

HubConnection hubConnection = HubConnectionBuilder.create("https://example.com/myhub")
.withAccessTokenProvider(Single.defer(() -> {
// Your logic here.
return Single.just("An Access Token");
})).build();

但是我想不通!! 我应该做的逻辑是什么?? 这也是我的提供程序类

public class MyCustomProvider : IUserIdProvider
{
public string GetUserId(HubConnectionContext connection)
{
//throw new NotImplementedException();
return connection.User?.FindFirst(ClaimTypes.Email).Value?.ToString();
}
}

这是我的枢纽

public class LocationHub : Hub
{
private readonly UserManager<ApplicationUser> _userManager;
public ApplicationDbContext _Context { get; }
public LocationHub(ApplicationDbContext context, UserManager<ApplicationUser> userManager)
{
_Context = context;
_userManager = userManager;
}
public async Task ShareLocation(double Latitude , double Longitude)
{
Console.WriteLine("New location from: "+Context.UserIdentifier+"::"+ Latitude + "///" + Longitude);
await Clients.Others.SendAsync("ReceiveNewLocation", Latitude, Longitude);
}
public override  Task OnConnectedAsync()
{
var user = _Context.Users.Where(u => u.Email == Context.UserIdentifier).FirstOrDefault();
user.LoginStatus = true;
_Context.SaveChanges();
return base.OnConnectedAsync();
}

上下文.用户标识符为空!! 当我尝试这个时

PreferencesStore.loadPreferences(this);
String mToken = PreferencesStore.getToken();
Log.d("SignalR", mToken);
hubConnection = HubConnectionBuilder.create("http://myserver/locationhub")
.withAccessTokenProvider(Single.defer(() -> {
return Single.just(mToken);
}))
.build();

最后找到了解决方案,如果有人遇到此问题,我将把它放在这里:

PreferencesStore.loadPreferences(this);
String mToken = PreferencesStore.getToken();
hubConnection = HubConnectionBuilder.create("http://myserver/locationhub")
.withHeader("Authorization", mToken)
.build();

它与文档不同。 就在这里我用了.withHeader("Authorization", mToken)但它工作得很好。

最新更新