AuthorizeForScopesAttribute 的内联等效项

问题描述

我们一直在开发一个控制器,例如使用 Microsoft.Identity.Web.AuthorizeforScopes 属性作为控制器

[AuthorizeforScopes(Scopes = new string[]
    {
    "https://ourdomain.co.uk/us.theapi/access",})]
public class browseController : Controller

直到我们现在这方法都运行良好。我们需要将 Web api 集部署到生产环境中。 apis 将有一个新的 Azure AD 应用程序注册用于生产。这意味着我们需要在 Azure 门户的“公开 API”部分中“添加范围”。新的 Azure AD 应用程序有一个新的应用程序 ID URI(Azure 不允许它使用开发应用程序注册使用的那个)。

该应用 ID URI 构成了范围字符串的一部分,因此如果我们的新应用 ID 是“https://ourdomain.co.uk/us.prod-theapi/”并且范围仍然是“访问”然后代码中的属性需要是“https://ourdomain.co.uk/us.prod-theapi/”,但这对开发没有好处。

是否有一种检查范围的方法,其结果与通过 AuthorizeforScopes 属性获得的结果相似但不使用属性?我们需要能够驱动配置属性使用的范围字符串

解决方法

基于 source code,您实际上可以定义配置节键,而不是内联定义作用域。

例如:

[AuthorizeForScopes(ScopeKeySection = "Auth:Scopes")]
public class BrowseController : Controller

在 appsettings JSON 中:

{
  "Auth": {
    "Scopes": "https://ourdomain.co.uk/us.theapi/access"
  }
}

然后,您可以根据环境或通过环境变量等为该配置值设置不同的值。