C# 信号承载令牌认证
嗨,我正在尝试设置带有承载身份验证的信号器。当我调试Requesttoken方法时,承载令牌被成功接收。但是,当我的signar客户端使用承载令牌调用受保护(authorize)方法时,他就没有经过身份验证。我还尝试实现自定义AuthorizeAttribute,但AccessTokenFormat.Unprotect始终返回null 错误消息:C# 信号承载令牌认证,c#,asp.net,authentication,signalr,asp.net-identity,C#,Asp.net,Authentication,Signalr,Asp.net Identity,嗨,我正在尝试设置带有承载身份验证的信号器。当我调试Requesttoken方法时,承载令牌被成功接收。但是,当我的signar客户端使用承载令牌调用受保护(authorize)方法时,他就没有经过身份验证。我还尝试实现自定义AuthorizeAttribute,但AccessTokenFormat.Unprotect始终返回null 错误消息: Caller is not authorized to invoke the Send method on Hub. 设置: Web Api项目
Caller is not authorized to invoke the Send method on Hub.
设置:
- Web Api项目
-Web Api项目中的信号器中心
-信号机的启动配置
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
map.UseOAuthAuthorizationServer(OAuthOptions);
map.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
Provider = new SignalrOAuthProvider()
});
var configuration = new HubConfiguration(){
EnableDetailedErrors = true
};
map.RunSignalR(configuration);
});
以及一个自定义OAuthprovider,它从cookie或querystring读取承载令牌
public class SignalrOAuthProvider : OAuthBearerAuthenticationProvider
{
public override Task RequestToken(OAuthRequestTokenContext context)
{
// var value = context.Request.Query.Get("bearer");
var value = context.OwinContext.Request.Cookies["BearerToken"];
if (!string.IsNullOrEmpty(value))
{
context.Token = value;
}
return Task.FromResult(null);
}
}
确保在集线器上使用[System.Web.Http.Authorize]属性。然后在报头中传递承载令牌
授权:持票人“您的代币”您好,您知道这件事吗?