ASP.NET Core Web API 和 Azure SignalR 服务中的身份验证

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

我有一个 ASP.NET Core Web API,其中托管 SignalR 集线器。

我创建了一个 Azure SignalR 服务,SignalR 集线器在启动时使用我创建 Azure SignalR 服务时提供的连接字符串连接到该服务。

我有一个 winforms 客户端应用程序,在启动时连接到 SignalR 中心。 Winforms 应用程序的用户使用 IWA 进行身份验证。

我的 Web API 仅用于托管 SignalR Hub,因此我不会在 Web API 中添加/使用控制器。但添加功能以支持 Winforms 客户端应用程序。

所以我的问题是,由于它托管在 Azure 中,我需要保护 API 免遭未经授权的访问。如果我理解正确的话,这可以通过在项目模板附带的控制器上添加

[Authorize]
来实现吗?

或者我可以简单地删除控制器,这样外部就没有人可以访问 API 了吗?

我是否还需要以某种方式保护我的 SignalR 集线器免遭未经授权的访问?

winforms authentication azure-active-directory signalr signalr-hub
1个回答
0
投票

如果我理解正确的话,这可以通过在项目模板附带的控制器上添加

[Authorize]
来实现吗?

是的,要保护和验证

Controller
/
Web API
操作方法
[Authorize]
属性,必须添加。

当我们在创建 Web 应用程序时选择身份验证类型时,

enter image description here

默认情况下,控制器操作方法将用

[Authorize]
属性修饰。

控制器中自动生成的代码:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Identity.Web.Resource;

namespace SignalR.Controllers
{
    [Authorize]
    [ApiController]
    [Route("[controller]")]
    [RequiredScope(RequiredScopesConfigurationKey = "AzureAd:Scopes")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
        "---------"
    };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }     
    }
}
  • 认证成功的会员将只能访问上述操作方法。

我可以简单地删除控制器,这样外部就没有人可以访问 API 了吗?

  • 由于您已经添加了

    [Authorize]
    属性,因此该方法只能由经过身份验证的用户访问。

  • AFAIK,无需删除控制器。如果删除控制器操作方法,则需要直接访问

    Azure SignalR
    服务。

  • 我尝试通过删除控制器来运行应用程序,但没有遇到任何问题。

enter image description here

enter image description here

  • 在这种情况下,我们需要将 [Authorize] 标签添加到本文中提到的 Azure Signal R 方法。

我是否还需要以某种方式保护我的 SignalR 集线器免遭未经授权的访问?

是的,我们也可以为 SignalR 服务添加

[Authorize]
属性。

请参阅验证和授权 SignalR Hub 的各种方法了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.