要实现在 SignalR Core Hub 中使用 Microsoft Identity Platform 进行身份验证,需要使用基于 Cookie 的身份验证模式。可以按照以下步骤操作:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/login";
options.LogoutPath = "/logout";
});
app.UseAuthentication();
public class ChatHub : Hub
{
private readonly IHttpContextAccessor _httpContextAccessor;
public ChatHub(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
}
[Authorize]
public async Task SendMessage(string message)
{
var user = _httpContextAccessor.HttpContext.User;
...
}
@inject NavigationManager NavigationManager
@inject ILogger Logger
@inject IAccessTokenProvider AccessTokenProvider
.WithUrl(NavigationManager.ToAbsoluteUri("/chathub"), async options =>
{
var accessTokenResult = await AccessTokenProvider.RequestAccessToken();
if (accessTokenResult.TryGetToken(out var accessToken))
{
options.Headers.Add("Authorization", $"Bearer {accessToken.Value}");
}
})
这样就可以在 SignalR Hub 中使用 Microsoft Identity Platform 进行身份验证了。