我试图弄清楚如何将当前使用ACS的系统迁移到Azure AD。我已经阅读了Azure提供的迁移文档,并浏览了Azure AD文档和示例代码,但是对于我这种情况最好的方法还是有些困惑。
我有一个Web API,该API具有大约100个独立的外部系统,这些系统定期与之连接。我们大约每周一次添加新的连接。这些外部系统不是用户,而是通过我的Web API与我的应用程序集成的应用程序。
当前,每个外部系统都有一个ACS服务标识/密码,它们使用它们来获取令牌,然后我们使用这些令牌进行身份验证。显然,该系统将于11月7日停用。
到目前为止,我阅读的所有Azure AD文档都表明,在进行迁移时,我应该将每个现有客户端设置为Azure AD中的“应用程序注册”。这样做的结果是,每个客户端不必使用用户名和密码连接到我,而必须使用应用程序ID(始终为GUID),加密的密码和似乎是“资源”的“资源”进行连接。与我所看到的受众群体网址相同。这本身很麻烦,但还不错。
然后,在我的Web API中实现授权部分看似简单。从根本上来说,我所需要做的就是在ApiController中包含正确配置的[Authorize]属性。但是诀窍在于要对其进行正确的配置。
根据我在所有示例中所看到的,我需要为每个可能将我的API连接到我的启动代码的客户端上的每个客户端硬编码唯一的受众URL,对于我,所以我只能假设我一定错过了一些东西。每当新的外部系统想要连接到我的API时,我真的需要重新编译代码并进行新的部署吗?
外面有人可以提供一些指导吗?
谢谢。
答案 0 :(得分:1)
您误解了观众URI的工作方式。 不是您客户的URI,而是您API的URI。
当客户端使用客户端凭据流(客户端ID +机密)请求令牌时,它们都必须使用API的应用ID URI作为资源。 那将是令牌中的受众。 您的API只需要检查令牌中包含其应用ID URI的受众即可。
尽管我还要提到,如果您想更好地做到这一点,则应在API清单中至少定义一个应用程序许可。您可以检查my article on adding permissions。 然后,您的API还应该检查访问令牌是否包含类似以下内容的内容:
"roles": [
"your-permission-value"
]
由于任何具有id + secret的客户端应用程序都可以获取该Azure AD租户中任何API的访问令牌,因此它使安全性更好一点。 但是,有了应用程序权限,您可以要求必须为客户端明确调用权限才能调用您的API。
当然,这会使迁移工作变得更加繁琐,因为您必须获得该应用程序的许可+将其授予所有客户端。 不过,所有这些都可以使用PowerShell自动进行。