0

例如,我们有一个我们一直在开发的控制器,它使用控制器的 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 不允许它使用开发应用程序注册使用的那个)。

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

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

4

1 回答 1

2

根据源代码,您实际上可以定义配置节键,而不是定义内联范围。

例如:

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

在 appsettings JSON 中:

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

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

于 2021-03-29T18:43:41.040 回答