如何在 .Net 5 OAuth 上授权不同的角色 API
How to authorize different roles on a .Net 5 OAuth API
我有一个 IdentityServer4 应用程序、一个客户端应用程序和一个 .Net 5 API。我希望客户端应用程序能够使用访问令牌代表用户与我的 API 对话。一些用户应该能够执行管理请求,而其他用户应该只能执行普通用户任务。
我想我需要为它们添加两个范围,api.admin 和 api.normal。
第一个问题是我应该在身份服务器中的什么地方添加这些范围?客户端是否请求两个范围并只取回 IS 决定适合该用户的任何内容?
其次,我如何验证 API 上访问令牌中的范围。仅当访问令牌包含例如 api.admin 范围时才应使用方法 1。
谢谢!
首先,范围通常是您在客户端中硬编码的东西,它不会因用户而“不同”。它的主要目的是表明“客户端”应用程序想要访问什么,而不是用户。
所以你只需要一个像“api”这样的范围。
那么您在访问令牌中有不同的角色或声明,这些角色或声明描述了经过身份验证的用户可以访问的内容。
然后您使用 API 中的授权中间件来确定用户实际有权访问的内容。
如下图所示:
没有理由不能根据用户与客户端的交互甚至基于环境的标准来请求不同的范围。
举一些简单的例子,已经向确定用户是“首选客户”的客户端应用程序进行身份验证的用户与访问者可能被授予允许阅读“首选内容”的范围。
然后客户请求“首选客户”的“首选内容”范围,而不是访问者。
当然,授权服务器可能出于任何原因拒绝请求的范围。
我有一个 IdentityServer4 应用程序、一个客户端应用程序和一个 .Net 5 API。我希望客户端应用程序能够使用访问令牌代表用户与我的 API 对话。一些用户应该能够执行管理请求,而其他用户应该只能执行普通用户任务。
我想我需要为它们添加两个范围,api.admin 和 api.normal。
第一个问题是我应该在身份服务器中的什么地方添加这些范围?客户端是否请求两个范围并只取回 IS 决定适合该用户的任何内容?
其次,我如何验证 API 上访问令牌中的范围。仅当访问令牌包含例如 api.admin 范围时才应使用方法 1。
谢谢!
首先,范围通常是您在客户端中硬编码的东西,它不会因用户而“不同”。它的主要目的是表明“客户端”应用程序想要访问什么,而不是用户。
所以你只需要一个像“api”这样的范围。
那么您在访问令牌中有不同的角色或声明,这些角色或声明描述了经过身份验证的用户可以访问的内容。
然后您使用 API 中的授权中间件来确定用户实际有权访问的内容。
如下图所示:
没有理由不能根据用户与客户端的交互甚至基于环境的标准来请求不同的范围。
举一些简单的例子,已经向确定用户是“首选客户”的客户端应用程序进行身份验证的用户与访问者可能被授予允许阅读“首选内容”的范围。
然后客户请求“首选客户”的“首选内容”范围,而不是访问者。
当然,授权服务器可能出于任何原因拒绝请求的范围。