Identityserver4 我是否可以验证JWT是否存在与IdentityServerAuthenticationOptions.AllowedScopes类似的声明

Identityserver4 我是否可以验证JWT是否存在与IdentityServerAuthenticationOptions.AllowedScopes类似的声明,identityserver4,Identityserver4,我知道我可以编写自己的过滤器来检查HttpContext.User.Identity的声明,我有一个有效的解决方案 我可以在管道中更早地使用以下方法对作用域进行选通: app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions { Authority = "http://localhost:7791", RequireHttpsMetadata = false, EnableCachin

我知道我可以编写自己的过滤器来检查HttpContext.User.Identity的声明,我有一个有效的解决方案

我可以在管道中更早地使用以下方法对作用域进行选通:

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
   Authority = "http://localhost:7791",
   RequireHttpsMetadata = false,
   EnableCaching = false,
   AllowedScopes = {"arbitrary"} 
});
与“AllowedScopes”一样,我的应用程序也可以将一些声明视为全局声明。 在我的显式示例中,我只允许访问由一组给定的“客户端ID”创建的令牌

在我的工具集中,我会发现下面这样的东西很有用

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
   Authority = "http://localhost:7791",
   RequireHttpsMetadata = false,
   EnableCaching = false,
   AllowedScopes = {"arbitrary"},
   AllowedClaims = [{"client_id","rock"},{"client_id","paper"},{"client_id","sissor"}]
});

我的主要问题是,如果这是一个可以在IdentityServer4中找到自然归宿的东西,或者我可以编写一个中间件来处理它。尽早处理声明有效性让我可以保持我的过滤器更干净。

所以你的问题是,你有一些客户端在你的“任意”作用域上运行,但你不希望这些客户端访问你的API,即使你说你的API需要“任意”作用域?我想对作用域和声明都进行检查。如果我可以对任意范围进行全局选通,那么我应该能够将我的一些声明视为全局选通。UseIdentityServerAuthentication只允许具有任意作用域的in-access_令牌,所以为什么不声明呢。范围是一个声明,类型为:scope。打开它!