我对Identity Server 3和OAuth2范围有疑问。
一般来说,我对范围的理解是对#34; group"资源,以及范围内定义的那些资源所需的索赔。
现在我想使用oauth2客户端凭据和OIDC混合流。 因为一个客户端只能在身份服务器中提供一个流,所以我必须为这些流创建不同的客户端,这很好。
对于Client Credentials流,范围必须具有" Resource"类型,因为其中没有声明。对于混合流程,他们将拥有"身份"与子索赔等。
我是否还必须为每个流创建不同的范围?我想知道因为我从来没有看过像#34; myservice.client"," myservice.hybrid"或某事像那样。我的计划是为两个流创建相同的范围,但由于它们包含不同的信息,因此可能不是"对"。
我不想要的是为不同的流程提供不同的API方法。如果有用户,则客户端应通过混合流与用户上下文连接,否则通过客户端凭据进行身份验证。
在我的控制器中,应该只有授权["某些范围"]。 是否可以将AuthorizationPolicies与" OR",使用一个名称和多个范围?
编辑:对于最后一个问题,我发现:
您还可以指定逗号分隔值列表作为其中一部分 索赔要求,例如
options.AddPolicy(" MustBeGroot",policy => policy.RequireClaim(" Permissions"," Read,Update"));会过去的 授权如果权限声明具有值或Read或 更新
但正确的链接是:http://docs.asp.net/en/latest/security/authorization/claims.html。 我们必须提供一个列表,而不是逗号分隔的字符串。
答案 0 :(得分:1)
有一些误解 -
AllowClientCredentialsOnly
设置。https://identityserver.github.io/Documentation/docsv2/configuration/clients.html
身份和资源范围都可以声明。身份范围定义身份令牌的内容,资源范围定义访问令牌的内容。对于用户身份验证,您使用身份令牌 - 对于API访问,您使用访问令牌。
您不需要为不同的流创建不同的范围。
https://identityserver.github.io/Documentation/docsv2/configuration/scopesAndClaims.html