没有 AspNetCore Identity 的角色和策略授权?
Role and Policy Authorization without AspNetCore Identity?
我们目前正在将内部桌面应用程序转移到一系列具有统一 Identity Server 的 Web 应用程序。因此,我们正在利用 Identity Server 来管理我们所有的用户帐户,并允许它联合访问我们的客户端和 API。总的来说,这一切都很好。
但是,我没有找到任何示例,其中有人在不使用 AspNetCore Identity 的情况下设法实现了基于角色或策略的授权。通过 IdentityServer 管理我的用户,我宁愿不必在我的身份服务器和我的个人 Web 应用程序之间复制我的用户,而是更愿意让每个 Web 应用程序管理自己的内部权限。
是否有任何示例说明如何在不利用整个 AspNetCore Identity 的情况下实现基于策略的授权?
你的问题的答案是设置一个单独的认证服务器和单独的授权服务器。正如 IdentityServer 的一位创建者所评论的 here:
IdentityServer is both an OAuth 2.0 and OpenID Connect implementation.
Yes – we recommend to use IdentityServer for end-user authentication,
federation and API access control.
PolicyServer is our recommendation for user authorization.
文章本身值得一读,这里是 link PolicyServer 网站。
这个想法很简单,尽管可能有不同的方法。实施可能需要一些时间,因为免费的开源版本使用本地源,而您可能希望使用集中式版本。这种情况可以考虑先看看商业版
简而言之,它是如何工作的。首先对用户进行身份验证。然后授权中间件向用户添加声明。然后用户被授权。在 code 中,类似于:
app.UseAuthentication();
// add this middleware to make roles and permissions available as claims
// this is mainly useful for using the classic [Authorize(Roles="foo")] and IsInRole functionality
// this is not needed if you use the client library directly or the new policy-based authorization framework in ASP.NET Core
app.UsePolicyServerClaims();
app.UseAuthorization();
这将使身份验证流程保持完整,并为用户提供 'opt-in' 授权。要加快性能,您可以使用缓存。
sub
声明是关键。作为 oidc 流程的一部分,这是唯一保持不变的声明。
OSS 示例适用于 Mvc 客户端,但当您使用资源 (api) 对其进行扩展时,它无法开箱即用。因为访问令牌可能不包含所有声明。
这就是本质,它是最了解相关声明的资源。所以应该是请求信息的资源。
事实上,这是本地 PolicyServer 实现所做的,对客户端和 api 的不同策略 json。您可以将其移至数据库并使用 client/scope 作为鉴别器,定义每个用户(子)的角色/权限。
api可以使用访问令牌向授权服务器请求信息。解决客户想知道允许哪些功能的问题,例如对于构建菜单,您可以使用端点扩展授权服务器,它可以在其中请求角色/权限列表。
我们目前正在将内部桌面应用程序转移到一系列具有统一 Identity Server 的 Web 应用程序。因此,我们正在利用 Identity Server 来管理我们所有的用户帐户,并允许它联合访问我们的客户端和 API。总的来说,这一切都很好。
但是,我没有找到任何示例,其中有人在不使用 AspNetCore Identity 的情况下设法实现了基于角色或策略的授权。通过 IdentityServer 管理我的用户,我宁愿不必在我的身份服务器和我的个人 Web 应用程序之间复制我的用户,而是更愿意让每个 Web 应用程序管理自己的内部权限。
是否有任何示例说明如何在不利用整个 AspNetCore Identity 的情况下实现基于策略的授权?
你的问题的答案是设置一个单独的认证服务器和单独的授权服务器。正如 IdentityServer 的一位创建者所评论的 here:
IdentityServer is both an OAuth 2.0 and OpenID Connect implementation. Yes – we recommend to use IdentityServer for end-user authentication, federation and API access control.
PolicyServer is our recommendation for user authorization.
文章本身值得一读,这里是 link PolicyServer 网站。
这个想法很简单,尽管可能有不同的方法。实施可能需要一些时间,因为免费的开源版本使用本地源,而您可能希望使用集中式版本。这种情况可以考虑先看看商业版
简而言之,它是如何工作的。首先对用户进行身份验证。然后授权中间件向用户添加声明。然后用户被授权。在 code 中,类似于:
app.UseAuthentication();
// add this middleware to make roles and permissions available as claims
// this is mainly useful for using the classic [Authorize(Roles="foo")] and IsInRole functionality
// this is not needed if you use the client library directly or the new policy-based authorization framework in ASP.NET Core
app.UsePolicyServerClaims();
app.UseAuthorization();
这将使身份验证流程保持完整,并为用户提供 'opt-in' 授权。要加快性能,您可以使用缓存。
sub
声明是关键。作为 oidc 流程的一部分,这是唯一保持不变的声明。
OSS 示例适用于 Mvc 客户端,但当您使用资源 (api) 对其进行扩展时,它无法开箱即用。因为访问令牌可能不包含所有声明。
这就是本质,它是最了解相关声明的资源。所以应该是请求信息的资源。
事实上,这是本地 PolicyServer 实现所做的,对客户端和 api 的不同策略 json。您可以将其移至数据库并使用 client/scope 作为鉴别器,定义每个用户(子)的角色/权限。
api可以使用访问令牌向授权服务器请求信息。解决客户想知道允许哪些功能的问题,例如对于构建菜单,您可以使用端点扩展授权服务器,它可以在其中请求角色/权限列表。