信令持有者令牌身份验证

本文关键字:身份验证 令牌 持有者 信令 | 更新日期: 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] 属性。然后在标头中传递持有者令牌。

授权:不记名"您的令牌"