0
|
X.Otano · 技术社区 · 6 年前 |
1
10
IdentityServer有三个部分:
有两个令牌:访问令牌和标识令牌。访问令牌用于访问资源(api和UserInfo端点),标识令牌包含有关用户的信息。 虽然IdentityServer是对用户进行身份验证,但它也包含授权配置。您可以使用类似PolicyServer的东西从IdentityServer中取出授权,但是对于基本授权,您不必这样做。 有两种类型的用户声明:
关于标识令牌,您唯一可以依赖的是它始终包含
另一方面,如果用户选择不给予同意,那么身份令牌将保持为空(子声明除外,因为scope=openid是必需的)。当从UserInfo端点请求时也是如此。
关于访问令牌,它实际上使客户端能够访问资源(api)。在client_credentials流中,没有用户(因此也不会有身份令牌),而在其他flwo中,客户端将代表用户执行操作。第一个流和其他流之间的区别是
返回IdentityServer。IdentityServer的一项重要工作是过滤声明。因为用户可以有很多要求,但你只在需要的时候才想要。因此,每个令牌都会添加请求的声明。
访问令牌中的声明依赖于上下文。因为只有API知道声明的含义。使用命名空间类型在声明之间进行区分。
访问令牌包含来自请求的作用域/资源的所有声明。这意味着使用该令牌可以访问资源/范围内的所有api,而不必为每个api获取新的令牌。 这也意味着代币可以变得相当大。在达到极限之前你应该避免的事情。这就是为什么您不希望在令牌中有权限。如果需要权限,则实现自己的授权服务器。
对于用户来说,用户是身份的资源。但对望远镜一无所知。所以不能将作用域绑定到用户。客户机有作用域,这为api打开了大门,但api决定用户是否真正拥有访问权限。 现在回答你的问题: a) 来自用户且与请求的声明类型匹配的所有声明都将添加到访问令牌中。其中请求的声明类型从请求的范围中获取。其中,将添加与请求范围相关的所有ApiResource声明类型以及请求范围本身的声明类型。
如果Api需要有关用户的信息,那么它可以使用访问令牌来调用UserInfo端点。默认标识令牌仅包含
为了绕过丢失的用户信息,只需向用户请求信息并将其存储在本地。不管怎样,你很可能需要它。
假设你有“天气”和“望远镜”资源weather.api.完全访问'和'仅限weather.api.read帴'(作为资源“weather”的一部分)。
为了让比利有充分的权限 http://api/admin (值:对)向比利索赔。对于Jhon,在订阅表中添加一条记录。 在一个api作用域上使用多个事件进行验证。您不希望客户端在只请求读取作用域时访问完整的访问功能。
简而言之,IdentityServer可以实现所有这些。如果需要权限,请查看策略服务器。 |
2
1
例如,如果您的用户可以细分为多个组织或部门,并且您希望在api中添加一个策略,以便仅允许在用户位于这些细分组之一时访问某些端点,则可以添加自定义声明
这很有可能通过
|
hashbytes · 在构造函数中调用异步函数。 6 年前 |