azure - 如何在 Azure API 管理中实现用户对操作的权限?

标签 azure asp.net-core azure-api-management

我创建了一个 .NET Core 2.0 API 并将其发布到 Azure。我有一个 API 管理 (APIM) 实例,它面向该 API,并执行它所做的所有精彩事情。然而,有一件事我似乎无法理解或找到任何文档。操作授权。 (不要与身份验证混淆,我已经工作得很好)。

我的 API 是一个带有 CRUD 操作的简单 RESTful 服务。我们以读取操作为例:

GET /api/owner/{ownerid}/thing/{thingid}

在这种情况下,我想要做的是授予用户在特定所有者内读取内容的权限。同一用户可能不具有不同所有者的读取权限。如果用户有权限,200 OK;否则,403 Forbidden

完全保留这个全权委托(delegate),对于实现这一点有哪些建议?我假设 APIM 中每个操作的入站策略是操作发生的地方?如果是这样,怎么办?

更新1

我被告知可以在各个操作级别使用相同的 validate-jwt 策略来附加到根的 validate-jwt 策略。这个想法是,根策略验证用户是否经过身份验证,而操作策略检查特定声明。这看起来效果很好,但这是正确的方法,还是只是一种黑客手段?

更新2

要使 validate-jwt 选项发挥作用,权限模型需要与角色和组保持良好一致;否则,它就像设置您自己的自定义数据库一样多,其中至少您可以从自己的规则中受益。最后,我将权限放入 Azure 存储帐户表中(任何数据库都可以),并使用 send-request (具有适当的缓存)根据当前操作和用户收集权限。它运作良好,但“感觉不对”。我很乐意与任何想要的人分享详细信息。与此同时,如果有人有更好的想法,我将暂时保留此问题。

最佳答案

最终,实现这一目标的唯一方法是在操作级别使用策略。您可以使用 validate-jwt 来检查特定声明,您还可以检查作为请求的一部分传递给您的一些其他凭据。或者您可以使用 send-request 调用其他服务并请求用户权限。 APIM本身除了一些基本信息外没有地方存储任何用户相关数据,因此此类授权信息需要来自APIM外部。

关于azure - 如何在 Azure API 管理中实现用户对操作的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52300120/

相关文章:

bash - Git Bash 中的 Azure CLI

asp.net-core - 在 Nano Server 上运行 ASP.NET 5 会抛出 "Unable to load DLL ' kernel3 2'"

azure - Azure API 管理可以根据请求负载进行缓存吗?

node.js - 网站部署到 Azure keystone.js 时出错

azure - 是否应将 Azure ServiceConfiguration.Cloud.cscfg checkin 源代码管理?

asp.net-core - Xunit 测试 SerializedError 返回对象值

sql - 存储库模式困境 : Redundant Queries vs. 数据库往返

azure-api-management - Azure API 管理策略 - 动态命名值选择

Azure API 网关 - 支持 OpenAPI 格式属性

使用存储的 Azure 资源