问题描述
我们一直在开发一个控制器,例如使用 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"
}
}
然后,您可以根据环境或通过环境变量等为该配置值设置不同的值。