繁体   English   中英

Signalr 承载令牌身份验证

[英]Signalr Bearer token authentication

嗨,我正在尝试使用承载身份验证设置信号器。 当我调试Requesttoken方法时,成功接收到承载令牌。 但是,当我的信号客户端使用不记名令牌调用受保护(授权)方法时,他就没有经过身份验证。 我还尝试实现自定义 AuthorizeAttribute,但 AccessTokenFormat.Unprotect 始终返回 null。

错误信息:

Caller is not authorized to invoke the Send method on Hub. 

设置:

  • 网络API项目
    -Web Api 项目中的Signalr 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM