1

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

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

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

我找到了解决方案,IdentityServer但没有关于OpenIddict.

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

4

2 回答 2

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>"];
   }
于 2016-11-25T13:50:55.150 回答
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);
}
于 2018-03-28T14:18:46.917 回答