【问题标题】:ASP.NET Can I make a custom attribute to deal with authorizing scopes?ASP.NET 我可以制作一个自定义属性来处理授权范围吗?
【发布时间】:2021-06-24 21:19:51
【问题描述】:

对不起,如果这是非常基本的,但我以前从未做过这样的事情。

在我的应用中,我们使用 Azure AD B2C 来照顾我们的用户。使用端点时,我们需要一个包含范围的 JWT 令牌,现在说“TestScope”。目前我有这个有效的代码:

    [Authorize]
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        // The web API will only accept tokens 1) for users, and 2) having the "TestScope" scope for this API
        static readonly string[] scopeRequiredByApi = new string[] { "TestScope" };

        [HttpGet]
        public string Get()
        {
            HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);

            return "test";
        }
    }

我的想法是,不是每次创建端点时都使用这两行代码,而是可以创建一个自定义属性,例如 '[Authorise(Scope = "TestScope")]' 来做同样的事情吗?或者可能是一个“[TestScope]”标签,我不必编写字符串并且可能会犯拼写错误,尽管我想如果我这样做会很快很明显。

感谢您的建议!欣赏它

【问题讨论】:

  • 我认为,如果您使用的是 Microsoft.Identity.Web,您应该能够使用类似:[AuthorizeForScopes(Scopes = new[] { "TestScope" })]

标签: c# asp.net annotations


【解决方案1】:

在这里大声想一想,这取决于您希望多久进行一次检查,这就是我可能会采用的方式。

  1. 如果它是一次性的或者可能很少调用,您可以使用 Enums 来避免拼写 错误。
  2. 如果您想不时检查自定义属性/操作 过滤器可能是一个不错的选择。
  3. 如果在用户登录并授权后进行授权检查 可以与具有自定义属性的授权过滤器一起使用以在何时忽略 必填。
  4. 如果您想检查每个授权/未授权的请求,您可以查看 制作自定义中间件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多