我在 ASP.NET Core 2.0 应用程序中使用 OpenIddict 进行 JWT 身份验证。
我正在遵循的想法这个线程并打电话AuthorizeWithJWT
SignalR 握手后的方法。但现在我不知道我应该设置什么AuthorizeWithJWT
方法,这样我就可以使用[Authorize(Roles="Admin")]
例如。
我尝试设置上下文用户,但它是只读的:
public class BaseHub : Hub
{
public async Task AuthorizeWithJWT(string AccessToken)
{
//get user claims from AccesToken
this.Context.User = user; //error User is read only
}
}
并使用授权属性:
public class VarDesignImportHub : BaseHub
{
[Authorize(Roles = "Admin")]
public async Task Import(string ConnectionString)
{
}
}
我强烈鼓励您继续在握手级别进行身份验证,而不是使用在 SignalR 级别实现的自定义和非标准解决方案。
假设您正在使用验证处理程序,您可以强制它从查询字符串中检索访问令牌:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication()
.AddOAuthValidation(options =>
{
options.Events.OnRetrieveToken = context =>
{
context.Token = context.Request.Query["access_token"];
return Task.CompletedTask;
};
});
}
Or OnMessageReceived
如果你想使用JWTBearer
:
services.AddAuthentication()
.AddJwtBearer(o =>
{
o.Events = new JwtBearerEvents()
{
OnMessageReceived = context =>
{
if (context.Request.Path.ToString().StartsWith("/HUB/"))
context.Token = context.Request.Query["access_token"];
return Task.CompletedTask;
},
};
});
不需要进行其他更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)