我创建了一个 .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/