2016-11-25 107 views
1

我有一台服务器,它使用ASP.NET Core Web ApiOpenIddict作为授权框架。现在我添加了一个SignalR主机,并希望为其添加授权。SignalR和OpenId连接

different sources我发现SignalR(JS客户端)希望您在查询字符串或cookie中发送访问令牌,因为websockets不支持标头。

由于身份验证中间件不检查查询字符串或cookie容器的授权条目,我需要实现这样一个提供者/检索器/解析器,它自己读取这个值。

我找到了solution for IdentityServer但没有任何关于OpenIddict

Where /如何使用OpenIddict实现这种令牌解析器?

+0

是[this](https://github.com/mikebridge/IdentityServer4SignalR)你想要做什么?它具有[两层中间件](https://github.com/mikebridge/IdentityServer4SignalR/blob/master/src/ChatAPI/Auth/JWTInitialization.cs#L80-L87)来接受查询字符串和标题。 – mikebridge

回答

2

如果使用JwtBearerAuthentication那么你可以使用OnMessageReceived设置令牌:

Events = new JwtBearerEvents() 
{ 
    OnMessageReceived = async (ctx) => 
    { 
     ctx.Token = ctx.Request.Query["<qs-name>"]; 
    } 
} 

或者,如果你使用IdentityServerAuthentication那么你可以使用TokenRetriever(未经测试,但它应该是这样的):

TokenRetriever = (ctx) => 
    { 
     return ctx.Request.Query["<qs-name>"]; 
    }