在 Azure AD 中配置应用程序权限
Configure Application Permissions in Azure AD
背景
我有一个 Web API 在 Azure AD 中注册并使用 WindowsAzureActiveDirectoryBearerAuthentication(OAuth2 持有者令牌)进行保护。这是一个 B2B 类型的场景,其中没有交互式用户 - 调用 API 的应用程序是 daemon-like 后台应用程序。因此,我不需要任何同意体验 - 我只希望受信任的应用程序能够调用 API,而其他应用程序 - 即使它们提供了有效的 OAuth 令牌 - 也会被拒绝。
我试过的
This sample 似乎几乎准确地描述了我的情况。但是,它确定调用者是否为受信任应用程序的方法是将调用者通过声明提供的 clientID 与 hard-coded 值进行比较。显然,您可以在外部存储受信任的 clientID 列表而不是硬编码,但似乎我应该能够通过 AAD 门户中的配置来完成此操作,这样 a) 我不必维护 clientID 列表,并且 b)我不必编写自己的授权逻辑。
看来我应该能够为我的 API 定义一个权限,将该权限授予 AAD 中的每个调用应用程序(或 one-time 管理员许可),然后在我的 API 只需检查 scp
声明中是否存在该权限。
从门户网站上看,这似乎是应用程序权限的用途:
我可以通过应用程序清单创建权限。不幸的是,我不知道如何指定它是应用程序权限,而不是委托权限!我尝试按照 MSDN 中的说明将 type
从用户更改为管理员,但这似乎没有效果。
"oauth2Permissions": [
{
...
"type": "Admin",
...
}
问题
我是否正确认为应用程序权限是适合我的场景的最佳解决方案?如果是这样,我该如何配置它?或者,正如我担心的那样,这是 On The Roadmap™ 上的另一个功能,但目前没有功能吗?
Ben,应用程序权限在清单的 appRoles 部分中声明。实际上,如果您在资源应用程序的(存储代理演示)清单中声明一个名为 say 'trusted' 的 appRole - 它将显示在“应用程序权限”下拉列表中。然后,当您将该应用程序权限分配给客户端应用程序时 - 客户端应用程序将使用客户端凭据 OAuth 流接收的访问令牌将包含一个值为 'trusted' 的角色声明。租户中的其他 apps 也将能够为您的资源应用程序获取访问令牌 - 但他们不会拥有 'trusted' 角色声明。有关详细信息,请参阅此博客 post:http://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/
最后,上述将应用程序权限分配给客户端应用程序的方法仅在资源和客户端应用程序都在同一目录中声明时才有效——如果这些 apps 是多租户且客户将单独安装这些 apps - 客户目录中的全局管理员需要同意客户端应用程序 - 这将导致应用程序权限被分配给客户租户中的客户端应用程序实例。 (我的博客 post 也介绍了这一点)
希望这个帮助ps。
ps:如果您遇到困难 - 请随时在 http://www.dushyantgill.com/blog
的联系页面上联系我
背景
我有一个 Web API 在 Azure AD 中注册并使用 WindowsAzureActiveDirectoryBearerAuthentication(OAuth2 持有者令牌)进行保护。这是一个 B2B 类型的场景,其中没有交互式用户 - 调用 API 的应用程序是 daemon-like 后台应用程序。因此,我不需要任何同意体验 - 我只希望受信任的应用程序能够调用 API,而其他应用程序 - 即使它们提供了有效的 OAuth 令牌 - 也会被拒绝。
我试过的
This sample 似乎几乎准确地描述了我的情况。但是,它确定调用者是否为受信任应用程序的方法是将调用者通过声明提供的 clientID 与 hard-coded 值进行比较。显然,您可以在外部存储受信任的 clientID 列表而不是硬编码,但似乎我应该能够通过 AAD 门户中的配置来完成此操作,这样 a) 我不必维护 clientID 列表,并且 b)我不必编写自己的授权逻辑。
看来我应该能够为我的 API 定义一个权限,将该权限授予 AAD 中的每个调用应用程序(或 one-time 管理员许可),然后在我的 API 只需检查 scp
声明中是否存在该权限。
从门户网站上看,这似乎是应用程序权限的用途:
我可以通过应用程序清单创建权限。不幸的是,我不知道如何指定它是应用程序权限,而不是委托权限!我尝试按照 MSDN 中的说明将 type
从用户更改为管理员,但这似乎没有效果。
"oauth2Permissions": [
{
...
"type": "Admin",
...
}
问题
我是否正确认为应用程序权限是适合我的场景的最佳解决方案?如果是这样,我该如何配置它?或者,正如我担心的那样,这是 On The Roadmap™ 上的另一个功能,但目前没有功能吗?
Ben,应用程序权限在清单的 appRoles 部分中声明。实际上,如果您在资源应用程序的(存储代理演示)清单中声明一个名为 say 'trusted' 的 appRole - 它将显示在“应用程序权限”下拉列表中。然后,当您将该应用程序权限分配给客户端应用程序时 - 客户端应用程序将使用客户端凭据 OAuth 流接收的访问令牌将包含一个值为 'trusted' 的角色声明。租户中的其他 apps 也将能够为您的资源应用程序获取访问令牌 - 但他们不会拥有 'trusted' 角色声明。有关详细信息,请参阅此博客 post:http://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/
最后,上述将应用程序权限分配给客户端应用程序的方法仅在资源和客户端应用程序都在同一目录中声明时才有效——如果这些 apps 是多租户且客户将单独安装这些 apps - 客户目录中的全局管理员需要同意客户端应用程序 - 这将导致应用程序权限被分配给客户租户中的客户端应用程序实例。 (我的博客 post 也介绍了这一点)
希望这个帮助ps。
ps:如果您遇到困难 - 请随时在 http://www.dushyantgill.com/blog
的联系页面上联系我