信令持有者令牌身份验证
本文关键字:身份验证 令牌 持有者 信令 | 更新日期: 2023-09-27 18:35:09
嗨,我正在尝试使用承载身份验证设置信号器。当我调试 Requesttoken 方法时,已成功接收持有者令牌。但是,当我的信号器客户端使用持有者令牌调用受保护(授权)方法时,他不会进行身份验证。我还尝试实现一个自定义的AuthorizeAttribute,但AccessTokenFormat.Unprotect总是返回null。
错误信息:
Caller is not authorized to invoke the Send method on Hub.
设置:
- 网页 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);
});
以及一个自定义 OAuth提供程序,它从 cookie 或查询字符串中读取持有者令牌
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] 属性。然后在标头中传递持有者令牌。
授权:不记名"您的令牌"