[英]Signalr Bearer token authentication
嗨,我正在尝试使用承载身份验证设置信号器。 当我调试Requesttoken方法时,成功接收到承载令牌。 但是,当我的信号客户端使用不记名令牌调用受保护(授权)方法时,他就没有经过身份验证。 我还尝试实现自定义 AuthorizeAttribute,但 AccessTokenFormat.Unprotect 始终返回 null。
错误信息:
Caller is not authorized to invoke the Send method on Hub.
设置:
Signalr 启动配置:
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);
});
以及从 cookie 或查询字符串中读取不记名令牌的自定义 OAuthprovider
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] 属性。 然后在标头中传递 Bearer 令牌。
授权:不记名“您的令牌”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.