我有几个应用程序,我正在将IdentityServer3设置为我的身份验证和授权服务器。
某些应用程序不能被所有用户访问。
让我们假设:
- 用户 1 可以访问应用程序 1、应用程序 4 和应用程序 5
- 用户 2 可以访问应用 5 和应用 2
那么,如何使这些规则发挥作用的最佳方法呢?我应该使用范围吗?还是我最好只使用声明?
IdentityServer 允许通过ICustomRequestValidator
接口对请求进行自定义验证。您可以实现这一点并返回错误,以防止用户获取客户端的令牌。
我相信只有当你需要在身份服务器级别控制用户对应用程序的访问时,CustomRequestValidator才是好的。但大多数时候,是应用程序决定让谁进入。这就像将您的问题改写为,
- 应用程序 1 可由用户 1 访问
- 应用程序4可由用户1访问
- 应用程序 2 可由用户 2 访问
- 应用程序5可由用户 1 和 2 访问
因此,在应用程序级别使用基于范围和声明的授权规则是一种很好的方法,具体取决于你的方案。