SignalR和OpenId Connect

时间:2016-11-25 13:28:34

标签: asp.net-web-api asp.net-core oauth-2.0 openid openiddict

我有一台使用ASP.NET Core Web ApiOpenIddict作为授权框架的服务器。现在我已经添加了SignalR主机,并希望为其添加授权。

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

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

我找到了solution for IdentityServer,但没有找到OpenIddict

在哪里/如何使用OpenIddict实现这样的令牌解析器?

2 个答案:

答案 0 :(得分: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>"];
   }

答案 1 :(得分:0)

就像@ adem-caglin提到的那样,在IdentityserverAuthentication中你使用TokenRetriever并且可以使用内置函数,如果你所追求的是标准的承载头或查询字符串

TokenRetriever = (request) => 
{
    // by default calls TokenRetrieval.FromAuthorizationHeader()(request);
    // check if request is to signalr endpoint and only then apply FromQueryString
    return TokenRetrieval.FromQueryString()(request);
}