使用OKTA和OAUTH对REST应用程序端点的端点进行细粒度访问控制 概述

使用OKTA和OAUTH对REST应用程序端点的端点进行细粒度访问控制 概述,oauth,oauth-2.0,authorization,okta,Oauth,Oauth 2.0,Authorization,Okta,我有一个REST应用程序,它有一个端点/电子书 它有3个与之关联的HTTP动词get(用于获取电子书详细信息)、post(用于添加电子书)、delete(用于删除电子书) 获取电子书可供系统中的所有用户使用。 创建和删除电子书需要管理员权限 我希望只有管理员权限的用户才能添加或删除电子书,换言之,只有只读权限的用户不能添加或删除电子书 我无法设置此级别的细粒度访问。通过我的设置,即使只有只读权限的用户也可以添加、删除电子书。 OKTA配置 我已经配置了电子书应用程序,并将OKTA配置为授权服务

我有一个REST应用程序,它有一个端点/电子书

它有3个与之关联的HTTP动词get(用于获取电子书详细信息)、post(用于添加电子书)、delete(用于删除电子书)

获取电子书可供系统中的所有用户使用。 创建和删除电子书需要管理员权限

我希望只有管理员权限的用户才能添加或删除电子书,换言之,只有只读权限的用户不能添加或删除电子书

我无法设置此级别的细粒度访问。通过我的设置,即使只有只读权限的用户也可以添加、删除电子书。


OKTA配置 我已经配置了电子书应用程序,并将OKTA配置为授权服务器。我能够获得访问令牌以访问应用程序

获取电子书可供所有用户使用,我在OKTA授权服务器中为此创建了scope ebook:read。 创建和删除电子书需要管理员权限,我已经为此创建了范围电子书:修改

我在OKTA中创建了两个用户应用程序

  • ReaderApp-此应用程序只能用于阅读电子书
  • AdminApp-此应用程序可用于阅读、添加和删除电子书
  • 我已将所需的用户/组分配给这些应用程序

    接下来,我在授权服务器中创建了2个访问策略

  • 读取访问策略-对于此策略,我已将ReaderApp指定为客户端,并创建了一个规则以接受“任何用户分配的应用”,请求的范围为“电子书:读取”
  • 管理员访问策略-对于此策略,我已将AdminApp指定为客户端,并创建了一个规则以接受“任何用户分配的应用”,请求的范围为“电子书:阅读”、“电子书:修改”
  • 在授权服务器中,我只添加了作用域和访问策略,没有涉及其他内容,如索赔等


    问题 到目前为止,以下内容仍在按预期为我工作:

  • 如果没有访问令牌,AdminApp和ReaderApp都无法访问电子书
  • ReaderApp通过请求ebook:read范围,成功从EbookApp访问电子书
  • ReaderApp无法在EbookApp中创建/删除电子书,请求ebook:modifyscope
  • AdminApp通过请求ebook:modifyscope成功读取/创建/删除EbookApp中的电子书

  • 但是,以下功能未按预期工作:

  • ReaderApp能够在中读取/创建/删除电子书 通过请求电子书:阅读范围这不应该发生

  • 是否可以通过请求“ebook:read”范围来阻止ReaderApp创建/删除电子书

    AdminApp和ReaderApp应用程序都使用相同的端点/电子书

    对于ReaderApp,此端点中不应访问postdelete方法,即使我已使用作用域对它们进行了保护,但它与端点没有直接关联,这就是问题所在

    我想我可能错过了一些非常基本的东西,但因为我是OKTA的新手,所以我还没弄明白

    这是我必须在电子书应用程序(资源服务器)本身中配置的东西,还是可以仅使用OKTA处理这种情况,可能需要一些授权服务器配置。 欢迎提出任何建议

    注意:在这篇文章中,为了清晰起见,我只提到了一个端点,但在我的实际应用程序中有很多端点