我在Azure AD中注册了一个Web API,并使用WindowsAzureActiveDirectoryBearerAuthentication(OAuth2 bearer token)进行保护。这是一种B2B类型的场景,其中没有交互式用户 - 调用API的应用程序是类似守护进程的后台应用程序。因此,我不需要任何同意经验 - 我只希望受信任的应用程序能够调用API,并且其他应用程序 - 即使它们提供有效的OAuth令牌 - 也会被拒绝。
This sample似乎几乎完全描述了我的情景。但是,它确定呼叫者是否是受信任的应用程序的方式是将通过呼叫者声明呈现的clientID与硬编码值进行比较。显然你可以在外部存储可信任的clientID列表而不是硬编码,但似乎我应该能够通过AAD门户中的配置来实现这一点,以便a)我不必维护clientID列表,并且b)我不必编写自己的授权逻辑。
似乎我应该能够为我的API定义权限,将权限授予AAD中的每个调用应用程序(或一次性管理员同意),然后在我的API中检查是否存在该权限在scp
声明中。
从查看门户网站看起来,这就是应用程序权限的用途:
我可以通过应用程序清单创建一个权限。不幸的是,我无法弄清楚如何指定它是一个应用程序权限,而不是委托权限!我尝试将type
从用户更改为管理员,如MSDN所述,但这似乎没有效果。
"oauth2Permissions": [
{
...
"type": "Admin",
...
}
我是否认为应用程序权限是我的方案的最佳解决方案?如果是,我该如何配置?或者,正如我所担心的那样,这是另一个功能是On The Roadmap™但目前无法正常运行吗?
答案 0 :(得分:4)
Ben,应用程序权限在清单的appRoles部分中声明。实际上,如果你宣布一个叫做“信任”的appRole。在您的资源应用程序(存储代理演示)清单中 - 它将显示在应用程序权限下拉列表中。然后,当您将该应用程序权限分配给客户端应用程序时 - 客户端应用程序将使用客户端凭据接收的访问令牌OAuth流程将包含值为“受信任”的角色声明'。租户中的其他应用也可以为您的资源应用获取访问令牌 - 但他们不会拥有“受信任的”#39;角色声称。有关详细信息,请参阅此博客文章:http://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/
最后,上述将应用程序权限分配给客户端应用程序的方法仅在资源和客户端应用程序在同一目录中声明时才有效 - 如果这些应用程序是多租户且客户将单独安装这些应用程序 - 来自客户目录的全局管理员需要同意客户端应用程序 - 这将导致应用程序权限被分配给客户的租户中的客户端应用程序实例。 (我的博文也涵盖了这一点)
希望这会有所帮助。
ps:如果你被卡住了 - 请随时在http://www.dushyantgill.com/blog
的联系页面上ping我