SignalR OnConnected() 覆盖的授权不会触发

问题描述 投票:0回答:0

我在我的 SignalR 集线器上实现了自定义授权,但是 HandleRequirementsAsync 方法不会在自定义处理程序上触发(vs 上的断点不会触发)。 这是我的代码:

//Handler
public class GameGroupsAuthorisationConnectRequirementHandler : AuthorizationHandler<GameGroupsAuthorisationConnectRequirement, HubInvocationContext>
{
    private RunningGameService _runningGameService;
    public GameGroupsAuthorisationConnectRequirementHandler(RunningGameService runningGameService)
    {
        _runningGameService = runningGameService;
    }

    protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, GameGroupsAuthorisationConnectRequirement requirement, HubInvocationContext resource)
    {
        if (await IsUserAllowedAndAddData(resource.HubMethodName, resource.Context))
        {
            context.Succeed(requirement);
        }
    }
//IsUserAllowedAndData Defined Here
}

要求

public class GameGroupsAuthorisationConnectRequirement: IAuthorizationRequirement
{
   
}

Program.cs:(相关部分)

builder.Services.AddSingleton<IAuthorizationHandler, GameGroupsAuthorisationConnectRequirementHandler>();
builder.Services.AddSingleton<IAuthorizationHandler, GameMethodAuthorisationRequirementHandler>();



builder.Services.AddAuthentication()
    .AddScheme<UserAuthenticationSchemeOptions, UserAuthenticationSchemeHandler>(
        "User",
        opts => { }
    );
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("GameGroupsAuthorisationConnect", policy =>
    {
        policy.Requirements.Add(new GameGroupsAuthorisationConnectRequirement());
        policy.AddAuthenticationSchemes("User");
    });
    options.AddPolicy("GameMethodAuthorisation", policy =>
    {
        policy.Requirements.Add(new GameMethodAuthorisationRequirement());
        policy.AddAuthenticationSchemes("User");
    });

});

在我的中心,我使用这样的授权属性

[Authorize]
//Base Hub Contains Group stuff
public class GameGroupsHub : Hub
{
    [Authorize(Policy = "GameGroupsAuthorisationConnect")]
    public override async Task OnConnectedAsync()
    {
    //Stuff
    }
//Stuff
}

任何帮助将不胜感激。 谢谢, 阿曼

c# asp.net-core authorization signalr-hub
© www.soinside.com 2019 - 2024. All rights reserved.