我有一台使用ASP.NET Core Web Api
和OpenIddict
作为授权框架的服务器。现在我已经添加了SignalR
主机,并希望为其添加授权。
从different sources我发现SignalR
(JS客户端)希望您在查询字符串或cookie中发送访问令牌,因为websockets不支持标题。
由于身份验证中间件没有检查查询字符串或cookie容器的授权条目,我需要实现这样的提供者/检索器/解析器,它自己读取这个值。
我找到了solution for IdentityServer
,但没有找到OpenIddict
。
在哪里/如何使用OpenIddict
实现这样的令牌解析器?
答案 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);
}