AuthorizeForScopesAttribute 的内联等效项

Inline equivalent of AuthorizeForScopesAttribute

我们有一个我们一直在开发的控制器,例如使用控制器的 Microsoft.Identity.Web.AuthorizeForScopes 属性

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

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

该 App ID URI 构成范围字符串的一部分,因此如果我们的新应用 ID 是“https://ourdomain.co.uk/us.prod -theapi/”并且范围仍然是“access”,那么代码中的属性将需要是“https://ourdomain.co.uk/us.prod-theapi/”但是这对发展。

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

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

例如:

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

在应用程序设置中 JSON:

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

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