azure - Microsoft Azure OAUTH2.0 - 多个源客户端如何调用 Azure OAUTH2.0 身份验证

标签 azure oauth-2.0 active-directory

我创建一个 Azure APIM 实例,将其注册为 AD 中的应用程序,然后在 APIM 下创建一个 OAUTH2.0 服务器,该服务器使用上述注册应用程序的 clientid/secret key 进行设置。我在这个 APIM 下创建了一个虚拟 API,然后使用这个 OAUTH2.0 服务器保护它。我还在我的 api 上添加了 JWT 策略,以查找 token 并针对租户 ID 进行身份验证。(未提及任何声明)。

现在可以说,我有一个客户 (ABC),为此我在 AD 中注册了另一个应用程序并创建其 Clientid/secret。客户在 token 端点的帮助下生成 token (此端点在 AD 应用程序注册选项的端点选项卡下给出)。客户使用此 token 调用 API 并且它可以工作。

问题:我没有向 AD 中的客户端应用程序授予 AD 中的 APIM 应用程序的任何权限,但它仍然有效,这本质上意味着 AD 中注册的任何应用程序的任何 Clientid/ secret 都将通过我的 JWT 策略API。因为它只是针对租户 ID 进行验证。我们如何才能阻止这种情况并确保它仅适用于授予权限的客户。

最佳答案

这是我在最近的文章中提到的主要内容之一:https://joonasw.net/view/azure-ad-authentication-aspnet-core-api-part-1 .

Azure AD 中任何类型为 Web 应用/API 的应用都可以获取该 Azure AD 租户中任何 API 的有效访问 token 。 甚至在授予它任何权限之前。 我猜这是一种“功能”。

引自文章:

If you only require an authenticated user, any confidential client in your Azure AD can acquire an access token for your API and call it. So it is important that you implement the user_impersonation scope check at minimum.

现在,由于您的调用者将调用您的 API 本身,因此您需要实现应用程序权限。 您可以在此处查看它们的定义方式:https://joonasw.net/view/defining-permissions-and-roles-in-aad .

然后实现检查,确保 roles 声明包含您定义的应用权限的。 声明将是一个字符串数组,因此需要进行某种包含检查。 然后,这将要求调用者授予此应用程序权限,然后才能成功调用电话。

如果您还想允许委托(delegate)调用(即代表用户调用), 然后为 user_impersonation 范围添加可选要求。 它们存储在单个字符串声明 (scp) 中,以空格分隔。 因此,对于该字符串,您需要对字符串进行包含检查。

关于azure - Microsoft Azure OAUTH2.0 - 多个源客户端如何调用 Azure OAUTH2.0 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51510722/

相关文章:

iis - 1.7 升级后 Azure WebRole 将无法启动

尝试挂载 blob 存储时出现容器错误的 azure webapp

azure - Service Fabric 可靠参与者和 I/O 操作

python - 通过 Gmail API 发送 Excel 文件但附件已损坏

.net - 如何设置 "user cannot change password"AD属性

azure - 使用服务总线触发器横向扩展 Function App

oauth-2.0 - 尝试通过 API key 授权访问 Google BigQuery

azure - 如何将授权代码交换为 Azure AD Multi-Tenancy 应用程序的 access_token?

c++ - 传递给 LogonUser() 的密码不正确,但 Active Directory 帐户未按预期锁定

perl - LDAP Active Directory 身份验证问题