首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Azure API管理中实现对操作的用户权限?

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

Stack Overflow用户
提问于 2018-09-13 00:53:54
回答 2查看 694关注 0票数 3

我已经创建了Azure Core2.0API并将其发布到.NET。我有一个API管理( API Management,APIM)实例放在API前面,并做它所做的所有奇妙的事情。然而,有一件事我似乎不能理解,也找不到任何文档。对操作的授权。(不要与身份验证混淆,我在这方面做得很好)。

我的应用程序接口是一个带有CRUD操作的简单RESTful服务。让我们以一个读取操作为例:

代码语言:javascript
复制
GET /api/owner/{ownerid}/thing/{thingid}

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

留下这个完全自主的空白,对实现这个有什么建议呢?我假设APIM中的每个操作的入站策略是操作将发生的位置?如果是这样的话,是怎么做的?

更新1

我被告知在各个操作级别使用相同的validate-jwt策略来附加到根validate-jwt策略的可能性。其思想是,根策略验证用户是否已通过身份验证,而操作策略检查特定声明。这似乎工作得很好,但这是正确的方法,还是只是一种技巧?

更新2

要使validate-jwt选项起作用,权限模型需要与角色和组很好地保持一致;否则,这与设置您自己的自定义数据库一样多,至少您可以从自己的规则中受益。最后,我将权限放在一个Azure Storage Account表中(任何数据库都可以),并使用一个send-request (带有适当的缓存)来根据当前操作和用户收集权限。它工作得很好,但“感觉不对劲”。我很乐意将详细信息分享给任何想要的人。在此期间,我将暂时保留这一点,以防有人有更好的想法。

EN

回答 2

Stack Overflow用户

发布于 2018-09-14 07:57:35

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

票数 0
EN

Stack Overflow用户

发布于 2018-09-14 09:39:31

最后,似乎没有内置的解决方案。滚动您自己的权限模型,然后自己验证它是可行的。

然而..。

这仍然可以在APIM中完成。正如我在第二次更新中提到的,我能够使自定义解决方案工作。它的实现方式是在“所有操作”级别使用入站策略来检索权限。(使用了缓存机制,以便不会在每次调用时都检索权限。)然后,每个操作根据传入的参数确定用户是否具有该特定操作的权限。(这也会被缓存。)

结果是根API没有内置的身份验证或授权,但APIM有内置的身份验证或授权,并观察到适当的行为。

尽管如此,首选的是基于角色的访问控制方法。例如,假设单个操作被视为此角色定义中的服务:

代码语言:javascript
复制
{
  "Name": "{rolename}",
  "Id": "{roleid}",
  "IsCustom": true,
  "Description": "{roledescription}",
  "Actions":  [
    "GET {myapi}/owner/{ownerid}/*",
    "POST {myapi}/owner/{ownerid}/*",
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/{subscriptionid}"
  ]
}

如果这是可能的,我们可以创建角色,在订阅级别将它们分配给用户/组,然后将声明自动传递到APIM,在APIM中可以像评估任何其他声明一样对它们进行评估。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52300120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档